将行结果拆分为列

时间:2012-11-12 05:01:54

标签: sql tsql

以下查询:

SELECT  i.Item_ID

  FROM  AGR_Header ah
        LEFT JOIN AGR_Detail ad
               ON ad.AGR_Header_RecID = ah.AGR_Header_RecID
        LEFT JOIN IV_Item i
               ON i.IV_Item_RecID = ad.IV_Item_RecID

显示以下结果:

a4 black usage page count
a4 colour usage page count
a4 black usage page count
a4 colour usage page count
a4 black usage page count
a4 colour usage page count
a4 black usage page count
a4 colour usage page count

有没有办法为每个Item_ID创建一个列,所以它显示如下:

A4 Black                     A4 Colour
a4 black usage page count    a4 colour usage page count
a4 black usage page count    a4 colour usage page count
a4 black usage page count    a4 colour usage page count
a4 black usage page count    a4 colour usage page count

我已经阅读过使用ROW_NUMBER为每个Item_ID分配顺序号或使用PIVOT ......不熟悉这些或任何其他方式来完成此任务,所以任何帮助都会受到赞赏。

干杯

1 个答案:

答案 0 :(得分:3)

如果您的输出与您提到的一样,那么您只需执行以下操作即可获得所需的输出:

SELECT 
    ISNULL(a4b.Item_ID, '') 'A4 Black', 
    ISNULL(a4c.Item_ID, '') 'A4 Color'
FROM
(
  SELECT    i.Item_ID, ROW_NUMBER() OVER(ORDER BY i.Item_ID ASC) 'RowNum'

  FROM  AGR_Header ah
        LEFT JOIN AGR_Detail ad
               ON ad.AGR_Header_RecID = ah.AGR_Header_RecID
        LEFT JOIN IV_Item i
               ON i.IV_Item_RecID = ad.IV_Item_RecID
  WHERE i.Item_ID LIKE 'a4 black%'
) AS a4b
FULL OUTER JOIN
(
  SELECT    i.Item_ID, ROW_NUMBER() OVER(ORDER BY i.Item_ID ASC) 'RowNum'

  FROM  AGR_Header ah
        LEFT JOIN AGR_Detail ad
               ON ad.AGR_Header_RecID = ah.AGR_Header_RecID
        LEFT JOIN IV_Item i
               ON i.IV_Item_RecID = ad.IV_Item_RecID
  WHERE i.Item_ID LIKE 'a4 color%'
) AS a4c
ON a4b.RowNum = a4c.RowNum

OUTER JOIN将处理a4 black和a4颜色的每个条目数不同的情况。

相关问题