简体   繁体   English

SQL-表子组内的数据透视

[英]SQL - Pivot within table sub-group

I'm using SQL Server 2014 Management Studio and I'm pretty new to SQL. 我正在使用SQL Server 2014 Management Studio,对SQL还是很陌生。 I am trying to find out how to do a pivot within a table sub-group. 我试图找出如何在表子组内进行数据透视。

I have the following table: 我有下表:

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 is one system and 1A / 1B are equipment within that system. XXX是一个系统,而1A / 1B是该系统中的设备。

XXZ is another system and 1A / 1B are equipment within that system. XXZ是另一个系统,而1A / 1B是该系统中的设备。

I need to pivot within the system groups so that the final table looks like this. 我需要在系统组中进行调整,以便最终表看起来像这样。

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

The number of time stamps for each system is always constant and each system has the same number of time stamps. 每个系统的时间戳数始终是恒定的,并且每个系统具有相同的时间戳数。

Thanks for the help 谢谢您的帮助

You need to separate the Name and the Tag s first. 您需要先将NameTag分开。 You can do that by using SUBSTRING and RIGHT . 您可以使用SUBSTRINGRIGHT做到这一点。 Then just do a conditional aggregation on the result: 然后只需对结果进行条件聚合:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM