在不知道所需列数的情况下进行透视查询

时间:2015-10-23 08:54:52

标签: sql-server

我有一个返回以下数据的查询。

ProductCode DealRef
1120          23
1120          76
1130          24

有没有办法,如果产品代码有多个Deal ref,那么它会把它放到一个新列中?所以目前的结果看起来像是;

ProductCode  Deal1   Deal2
1120          23       76
1130          24

如果这不可能,那么我有一个可行的想法。我会依靠DealRef列找出我需要转向的许多列。然后我需要在我的初始查询中添加另一个列,它将能够为每行添加一个id,显示类似于下面的内容,我不确定该怎么做。

ProductCode DealRef  id
1120          23      1
1120          76      2
1130          24      1

1 个答案:

答案 0 :(得分:2)

您无法获得拟合的列数,但您可以获得尽可能多的列,因为大多数列都是NULL:

将其粘贴到空查询窗口并执行。适应您的需求

DECLARE @tbl TABLE(ProductCode INT, DealRef INT);
INSERT INTO @tbl VALUES
 (1120,23)
,(1120,76)
,(1130,24);

SELECT p.*
FROM
(
    SELECT 'deal' + CAST(ROW_NUMBER() OVER(PARTITION BY tbl.ProductCode ORDER BY tbl.ProductCode) AS VARCHAR(10)) AS ColumnName
          ,tbl.ProductCode
          ,tbl.DealRef
    FROM @tbl AS tbl
) AS x
PIVOT
(
    MIN(DealRef) FOR ColumnName IN(deal1,deal2,deal3,deal4 /*Add as many Col-names as you could maximum need*/)
) AS p

结果是

ProductCode deal1   deal2   deal3   deal4
1120        23      76      NULL    NULL
1130        24      NULL    NULL    NULL