2009-07-17 2 views
3

Orders
(OrderID, date, customerID, status, etc)

SQL을 사용하여 부모/자식 행을 플랫 파일로 내보내기

OrderDetails 표 :
(ParentID, itemID, quantity, price, etc)

OrderOrderDetail 행이 산재 된 CSV 플랫 파일을 내보낼 SQL 쿼리를 작성하려고합니다. 예를 들어 출력은 다음과 같이 보일 수 있습니다 (HD은 각각 "머리글"및 "상세 정보"를 나타냅니다.) :

"H",2345,"6/1/09",856,"Shipped" 
"D",2345,52,1,1.50 
"D",2345,92,2,3.25 
"D",2345,74,1,9.99 
"H",2346,"6/1/09",474,"Shipped" 
"D",2346,74,1,9.99 
"D",2346,52,1,1.50 

어디서부터 시작해야할지 모르겠습니다. 어떤 아이디어? TIA.

답변

5

union all은 전체 결과 집합의 끝에 order by 절을 부여한다는 점을 이용하려고합니다. 따라서 두 번째 열 (2!)에서 오름차순으로 주문하고 첫 번째 열 (1!)이 내림차순으로 정렬하면 머리글 행이 표시되고 그 아래 세부 행이 표시됩니다.

또한 두 쿼리에서 같은 수의 열을 사용해야합니다. CSV로 내보내므로 같은 데이터 유형 일 필요는 없지만 같은 번호 여야합니다. 그렇지 않으면 union all은 서로를 쌓을 수 없습니다. 경우에 따라 여분의 문자가 필요할 경우 null 열을 채우기 만하면됩니다. null을 CSV에 넣지 않으려면 ''을 입력해야합니다.

select 
    'H', 
    OrderID, 
    Date, 
    CustomerID, 
    Status 
from 
    Headers 
union all 
select 
    'D', 
    ParentID, 
    ItemID, 
    Quantity, 
    Price 
from 
    Details 
order by 
    2 asc, 1 desc 
관련 문제