2009-07-17 3 views
3

Mit einem Orders Tabelle exportieren:
(OrderID, date, customerID, status, etc)Verwenden Sie SQL Eltern-/Kind-Zeilen in eine flache Datei

und einer OrderDetails Tabelle:
(ParentID, itemID, quantity, price, etc)

Ich möchte eine SQL-Abfrage erstellen, die exportieren eine CSV-Flat-Datei mit Order und OrderDetail Reihen eingestreut. Zum Beispiel könnte eine Ausgabe wie folgt aussehen (H und D zeigen „Header“ und „Detail“ angezeigt.):

"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 

nicht sicher, wo man auch mit dieser starten. Irgendwelche Ideen? TIA.

Antwort

5

Sie möchten die Tatsache ausnutzen, dass union all die order by-Klausel am Ende des gesamten Ergebnissatzes berücksichtigt. Wenn Sie also nach der zweiten Spalte (2!) Aufsteigend und die erste Spalte (1!) Absteigend sortiert, erhalten Sie die Kopfzeile und dann die Detailzeilen darunter.

Stellen Sie außerdem sicher, dass Sie die gleiche Anzahl von Spalten in den zwei Abfragen haben. Sie müssen nicht vom selben Datentyp sein, da Sie in CSV exportieren, aber sie müssen die gleiche Nummer haben. Andernfalls können die union all sie nicht aufeinander stapeln. Manchmal müssen Sie nur Spalten mit null auffüllen, wenn Sie zusätzliche benötigen, oder '', wenn Sie nicht das Wort null in Ihrer CSV möchten.

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