使用SQL将父/子行导出到平面文件中

时间:2009-07-17 01:13:41

标签: tsql

使用Orders表:
(OrderID, date, customerID, status, etc)

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

我想创建一个SQL查询,它将导出一个散布有OrderOrderDetail行的CSV平面文件。例如,输出可能如下所示(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。

1 个答案:

答案 0 :(得分:5)

您希望利用union all将在整个结果集的最后尊重order by子句的事实。因此,如果您按第二列(2!)升序排序,并且第一列(1!)降序,您将获得标题行,然后是该行下方的详细信息行。

此外,请确保两个查询中的列数相同。它们不必具有相同的数据类型,因为您要导出为CSV,但它们必须是相同的数字。否则,union all将无法将它们堆叠在一起。有时,如果您需要额外的列,则只需使用null填充列,或者如果您不想在CSV中使用''这个词,则需null

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