0
UNIT       ID        TAG      value

unit1      A         tag1      0
unit1      A         tag2      53
unit2      A         tag1      2
unit3      B         tag1      35
unit3      B         tag2      3
unit4      A         tag1      62
unit1      B         tagn      0

Expected output

UNIT      ID       tag1     tag2 .... tagn
unit1     A        null      53        x 
unit1     B         2         -        x 
unit3     B         2         3        x 
unit4     A         62        -        x 
unit5     B         -         -        0
4

1 回答 1

0

如果您使用的是 SQL SERVER,请尝试此操作

DECLARE @cols NVARCHAR(MAX)
DECLARE @query NVARCHAR(MAX)

SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME([TAG]) 
            FROM Table1 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


SET @query = 'SELECT [UNIT], [ID],'+@cols+'  FROM Table1
            PIVOT
            (
                MAX([value]) FOR  [TAG] IN ('+@cols+')
            ) P
            ORDER BY [UNIT],[ID]'


EXEC(@query)

SQL 小提琴演示

输出

UNIT    ID  tag1    tag2    tagn
unit1   A   0         53    NULL
unit1   B   NULL    NULL    0
unit2   A   2       NULL    NULL
unit3   B   35         3    NULL
unit4   A   62      NULL    NULL
于 2013-08-22T08:18:43.573 回答