2009-07-17 6 views
3

Avec une table Orders:
(OrderID, date, customerID, status, etc)Utilisez SQL pour exporter des parents/lignes enfants dans un fichier plat

et une table OrderDetails:
(ParentID, itemID, quantity, price, etc)

Je voudrais créer une requête SQL qui exportera un fichier plat CSV avec Order et OrderDetail lignes entrecoupées. Par exemple, la sortie pourrait ressembler à ceci (H et D indiquent « En-tête » et « Détail » respectivement.):

"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 

Je ne sais pas où commencer même avec cela. Des idées? TIA.

Répondre

5

Vous voudrez profiter du fait que union all respectera la clause order by à la fin de l'ensemble des résultats. Par conséquent, si vous commandez par la deuxième colonne (2!) Ascendant, et la première colonne (1!) Décroissante, vous obtiendrez la ligne d'en-tête, puis les lignes de détail en dessous.

Assurez-vous également que vous avez le même nombre de colonnes dans les deux requêtes. Ils n'ont pas besoin d'être du même type de données, puisque vous exportez en CSV, mais ils doivent être le même nombre. Sinon, le union all ne pourra pas les empiler les uns sur les autres. Parfois, vous aurez juste à remplir les colonnes avec null si vous avez besoin de plus, ou '' si vous ne voulez pas le mot null dans votre fichier 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 
Questions connexes