我有一个返回以下数据的查询。
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
答案 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