我正在使用SQL Server 2014 Management Studio,而且我对SQL很新。我试图找出如何在表子组中进行透视。
我有下表:
Equipment Name Time Tag1 Tag2
---------------------------------------------------------------
XXX1A 1:00 10.5 50.5
XXX1A 1:05 12 70
XXX1A 1:10 15 100
XXX1B 1:00 10.6 51
XXX1B 1:05 12.1 70.5
XXX1B 1:10 16 101
XXZ1A 1:00 10.5 50.5
XXZ1A 1:05 13 80
XXZ1A 1:10 15 100
XXZ1B 1:00 10.6 51
XXZ1B 1:05 12.1 70.5
XXZ1B 1:10 19 104
XXX
是一个系统,1A / 1B是该系统内的设备。
XXZ
是另一个系统,1A / 1B是该系统内的设备。
我需要在系统组中进行透视,以便最终表格如下所示。
System Time 1A_Tag1 1A_Tag2 1B_Tag1 1B_Tag2
----------------------------------------------------
XXX 1:00 10.5 50.5 10.6 51
XXX 1:05 12 70 12.1 70.5
XXX 1:10 15 100 16 101
XXZ 1:00 10.5 50.5 10.6 51
XXZ 1:05 13 80 12.1 70.5
XXZ 1:10 15 100 19 104
每个系统的时间戳数总是不变的,每个系统都有相同的时间戳数。
感谢您的帮助
答案 0 :(得分:1)
您需要先将Name
和Tag
分开。您可以使用SUBSTRING
和RIGHT
来完成此操作。然后只对结果进行条件聚合:
WITH CTE AS(
SELECT *,
System = SUBSTRING(EquipmentName, 1, LEN(EquipmentName) - 2),
Tag = RIGHT(EquipmentName, 2)
FROM tbl
)
SELECT
System,
Time,
[1A_Tag1] = MAX(CASE WHEN Tag = '1A' THEN Tag1 END),
[1A_Tag2] = MAX(CASE WHEN Tag = '1A' THEN Tag2 END),
[1B_Tag1] = MAX(CASE WHEN Tag = '1B' THEN Tag1 END),
[1B_Tag2] = MAX(CASE WHEN Tag = '1B' THEN Tag2 END)
FROM CTE
GROUP BY System, Time
ORDER BY System, Time