programing

SQL에서 all union과 order by를 사용하는 방법은 무엇입니까?

newnotes 2023. 4. 20. 22:42
반응형

SQL에서 all union과 order by를 사용하는 방법은 무엇입니까?

아래 sql 쿼리를 시도했습니다.

SELECT * FROM (SELECT * 
FROM TABLE_A ORDER BY COLUMN_1)DUMMY_TABLE
UNION ALL 
SELECT * FROM TABLE_B 

다음과 같은 에러가 발생합니다.

TOP 또는 FOR XML을 지정하지 않는 한 ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 일반 테이블 식에서 사용할 수 없습니다.

나는 모두 함께 주문을 사용해야 한다.어떻게 하면 좋을까요?

SELECT  * 
FROM 
        (
            SELECT * FROM TABLE_A 
            UNION ALL 
            SELECT * FROM TABLE_B
        ) dum
-- ORDER BY .....

모든 기록을 갖고 싶다면Table_A결과 목록 맨 위에 사용자 정의 값을 추가할 수 있습니다.이 값은 주문에 사용할 수 있습니다.

SELECT  * 
FROM 
        (
            SELECT *, 1 sortby FROM TABLE_A 
            UNION ALL 
            SELECT *, 2 sortby FROM TABLE_B
        ) dum
ORDER   BY sortby 

괄호는 꼭 필요 없어요.직접 정렬할 수 있습니다.

SELECT *, 1 AS RN FROM TABLE_A
UNION ALL 
SELECT *, 2 AS RN FROM TABLE_B
ORDER BY RN, COLUMN_1

OP의 직접적인 응답은 아니지만, OP의 ERROR 메시지에 대한 응답으로 이곳에 들어와야겠다고 생각했습니다. 그러면 당신은 완전히 다른 방향을 찾을 수 있습니다.

이 모든 답변은 레코드 세트가 검색되고 로트가 정렬되면 전체 주문 기준과 관련이 있습니다.

UNION의 부분을 개별적으로 주문하고 동일한 SELECT에 "가입"하고 싶다면 어떻게 해야 합니까?

SELECT pass1.* FROM 
 (SELECT TOP 1000 tblA.ID, tblA.CustomerName 
  FROM TABLE_A AS tblA ORDER BY 2) AS pass1
UNION ALL 
SELECT pass2.* FROM 
  (SELECT TOP 1000 tblB.ID, tblB.CustomerName 
   FROM TABLE_B AS tblB ORDER BY 2) AS pass2

TOP 1000은 임의 번호입니다.필요한 모든 데이터를 캡처할 수 있을 만큼 큰 숫자를 사용합니다.

다음과 같은 작업을 수행해야 할 때가 있습니다.

표 1에서 상위 5를 정렬 기준으로 꺼냅니다.
다른 종류에 따라 표 2의 하단 5를 선택합니다.
이것들을 하나로 합칠 수 있습니다.

해결 방법

select * from (
-- top 5 records
select top 5 col1, col2, col3 
from table1 
group by col1, col2
order by col3 desc ) z 

union all

select * from (
-- bottom 5 records 
select top 5 col1, col2, col3 
from table2 
group by col1, col2
order by col3 ) z 

이것이 내가 오류를 피할 수 있는 유일한 방법이었고 내게는 잘 작동했다.

SELECT * FROM (SELECT * 
FROM TABLE_A ORDER BY COLUMN_1)DUMMY_TABLE
UNION ALL 
SELECT * FROM TABLE_B 
ORDER BY 2;

2는 여기서 열 번호입니다.오라클 SQL에서는 데이터를 정렬하는 데 사용할 열 번호를 사용할 수 있습니다.

이것으로 SELECT 문장은 해결되었습니다.

SELECT * FROM 
(SELECT id,name FROM TABLE_A 
UNION ALL 
SELECT id,name FROM TABLE_B )  dum
order by dum.id , dum.name

여기서 id 및 name 컬럼은 테이블에서 사용할 수 있으며 컬럼을 사용할 수 있습니다.

괄호나 그 외의 것은 필요 없습니다.

SELECT *, id as TABLE_A_ID FROM TABLE_A
UNION ALL 
SELECT *, id as TABLE_B_ID FROM TABLE_B
ORDER BY TABLE_A_ID, TABLE_B_ID

마지막 결합 후 주문 기준(ORDER BY)은 결합에 의해 결합된 두 데이터 세트에 모두 적용해야 합니다.

이하에 나타내는 솔루션은, 다음과 같습니다.

SELECT *,id AS sameColumn1 FROM Locations 
UNION ALL
SELECT *,id AS sameColumn2 FROM Cities
ORDER BY sameColumn1,sameColumn2 
select CONCAT(Name, '(',substr(occupation, 1, 1), ')') AS f1
from OCCUPATIONS
union
select temp.str AS f1 from 
(select count(occupation) AS counts, occupation, concat('There are a total of ' ,count(occupation) ,' ', lower(occupation),'s.') As str  from OCCUPATIONS group by occupation order by counts ASC, occupation ASC
 ) As temp
 order by f1

언급URL : https://stackoverflow.com/questions/15470191/how-to-use-order-by-with-union-all-in-sql

반응형