Поворот, когда значение в столбцах дублируется - PullRequest
0 голосов
/ 05 июля 2018

Из результата этого запроса:

+--------------------------------------+-----------+--------+
|                  id                  |   name    |  data  |
+--------------------------------------+-----------+--------+
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | LMP1(FA5) | NULL   |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Limits    | NULL   |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Low       | 1      |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | High      | 3      |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Units     | second |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Comp      | GELE   |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Data      | 1.8    |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Status    | Passed |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | LMP2(FA6) | NULL   |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Limits    | NULL   |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Low       | 1      |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | High      | 3      |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Units     | second |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Comp      | GELE   |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Data      | 1.8    |
| 4EAB4160-75FF-11E8-8719-2C56DC925591 | Status    | Passed |
+--------------------------------------+-----------+--------+

Я хотел бы получить это:

results

Я пробовал это, но это не окончательный ответ:

SELECT *
FROM
(
SELECT  id, name, data as f FROM temp_id)t
PIVOT(MIN(f)
      FOR name
      IN ([LMP1 (FA5)],[Limits],[Low],[High],[Units],[Comp],[data],[Status])
      )p

было бы неплохо также иметь имя динамического столбца ...

Благодарю всех за помощь.

Я пробовал этот динамический пивот, но он не работает:

DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX);

 SET @cols = STUFF((SELECT ',' + QUOTENAME(c.name) 
            FROM temp_id c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT id,' + @cols + ' from 
            (
                select id
                    , name
                    , data
                from temp_id
           ) x
            pivot 
            (
                count(name)
                for name in (' + @cols + ')
            ) p 
...