Development Tip

SQL에서 Union All과 함께 Order by를 사용하는 방법은 무엇입니까?

yourdevel 2020. 12. 14. 20:53
반응형

SQL에서 Union All과 함께 Order by를 사용하는 방법은 무엇입니까?


아래에 주어진 SQL 쿼리를 시도했습니다.

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

다음 오류가 발생합니다.

ORDER BY 절은 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 메시지에 응답하여 여기에서 지미가 될 것이라고 생각했습니다.

이 모든 답변은 레코드 세트가 검색되고 로트를 정렬하면 전체 ORDER BY를 참조합니다 .

UNION의 각 부분 을 독립적 으로 ORDER BY 하고 여전히 동일한 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은 임의의 숫자입니다. 필요한 모든 데이터를 캡처하려면 충분히 큰 숫자를 사용하십시오.


Select 'Shambhu' as ShambhuNewsFeed,Note as [News Fedd],NotificationId
from Notification with(nolock) where DesignationId=@Designation 
Union All 
Select 'Shambhu' as ShambhuNewsFeed,Note as [Notification],NotificationId
from Notification with(nolock) 
where DesignationId=@Designation 
order by NotificationId desc

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

반응형