SELECT 'CFS to Zero' Location, [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],
[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23] FROM
(SELECT Trailer_RegNo,Time FROM #tt )as Tab1
PIVOT
(
max(Trailer_RegNo) FOR Time IN ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],
[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23])) AS Tab2
对于上述查询,我正在获取仅返回 1 行的数据。图片附在下面
我需要一个输出
Location 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
CFS to Zero NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL KA108112 TN52C4788 TN04AH3243 TN04AB6915 TN03H9079 NULL NULL NULL NULL NULL NULL NULL
CFS to Zero NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL KA108112 TN28C3709 TN04AK3631 TN04J6646 TN04AE7461 NULL NULL NULL NULL NULL NULL NULL
etc
不,PIVOT
没有聚合函数是不可能的,但是您可以通过确保每组只有一个源行来任意设置聚合函数。从您的问题中并不能立即清楚您的逻辑是什么:
例如,您有两个值表示时间为 12 (KA108112
和KA106360
),有 3 行表示时间为 13 ( TN04F6726
, TN28C3709
, TN52C4788
),因此您可以通过几种不同的方式将这两者结合起来。
您可以返回笛卡尔积:
12 13
----------------------
KA108112 TN04F6726
KA106360 TN04F6726
KA108112 TN28C3709
KA106360 TN28C3709
KA108112 TN52C4788
KA106360 TN52C4788
或者你可以返回每个结果一次,例如
12 13
----------------------
KA106360 TN04F6726
KA108112 TN28C3709
NULL TN52C4788
但是您还需要提供额外的逻辑,即为什么会KA106360
匹配TN04F6726
, 而不是其他两个值中的任何一个(在上面的示例中,我每次都按字母顺序排列 ordererd Trailer_RegNo,但可能有多种方法可以做到这一点。
根据您的评论,您似乎想要任意配对值,因此为了确保表示每个值,您需要使每一行都是唯一的,您可以使用ROW_NUMBER()
,例如
DECLARE @T TABLE (Time INT, Trailer_RegNo VARCHAR(20));
INSERT @T (Time, Trailer_RegNo)
VALUES (12, 'KA108112'), (12, 'KA106360'), (13, 'TN04F6726'), (13, 'TN28C3709'), (13, 'TN52C4788');
SELECT Trailer_RegNo,
Time,
RowNumber = ROW_NUMBER() OVER(PARTITION BY [Time] ORDER BY Trailer_RegNo)
FROM @T;
这使:
Trailer_RegNo Time RowNumber
----------------------------------
KA106360 12 1
KA108112 12 2
TN04F6726 13 1
TN28C3709 13 2
TN52C4788 13 3
现在您可以配对您的物品(即 KA106360 和 TN04F6726、KA108112 和 TN28C3709 等)。要更改项目的分组方式,您只需更改函数中的ORDER BY
子句ROW_NUMBER()
。
所以你的最终查询可能是这样的:
DECLARE @T TABLE (Time INT, Trailer_RegNo VARCHAR(20));
INSERT @T (Time, Trailer_RegNo)
VALUES (12, 'KA108112'), (12, 'KA106360'), (13, 'TN04F6726'), (13, 'TN28C3709'), (13, 'TN52C4788'),
(14, 'KA108112'), (15, 'KA106360'), (15, 'TN04F6726'), (1, 'TN28C3709'), (0, 'TN52C4788');
SELECT 'CFS to Zero' Location,
[0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],
[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]
FROM ( SELECT Trailer_RegNo,
Time,
RowNumber = ROW_NUMBER() OVER(PARTITION BY [Time] ORDER BY Trailer_RegNo)
FROM @T
) AS Tab1
PIVOT
( MAX(Trailer_RegNo)
FOR [Time] IN
( [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],
[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]
)
) AS Tab2;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句