Sql server 2012 Sql Server分组依据和案例

Sql server 2012 Sql Server分组依据和案例,sql-server-2012,group-by,case,Sql Server 2012,Group By,Case,假设我们有以下表格内容: id type value 1 A X1122 1 B JJHJU 2 A POIUY 2 C YUHGF 我想通过以下方式获得此解决方案: id valueA valueB valueC 1 X1122 JJHJU NULL 2 POIUY NULL YUHGF 我的第一次尝试是: SELECT id, CASE type WHEN A THEN value ELSE NULL E

假设我们有以下表格内容:

id  type  value
1    A    X1122
1    B    JJHJU
2    A    POIUY
2    C    YUHGF
我想通过以下方式获得此解决方案:

id  valueA  valueB  valueC
1   X1122   JJHJU   NULL
2   POIUY   NULL    YUHGF
我的第一次尝试是:

SELECT id, CASE type WHEN A THEN value ELSE NULL END AS valueA
, CASE type WHEN B THEN value ELSE NULL END AS valueB
, CASE type WHEN C THEN value ELSE NULL END AS valueC
FROM table
GROUP BY id
但它会返回错误

列“type”和“value”需要位于GROUP BY语句中


有什么建议吗?

您试图实现的目标称为枢轴:

declare @data table(id int, valtype char(1), val varchar(10))
insert into @data(id, valtype, val) values
(1, 'A', 'X1122'), (1, 'B', 'JJHJU'), (2, 'A', 'POIUY'), (2, 'C', 'YUHGF')

Select id, valueA = piv.A, valueB = piv.B, valueC = piv.C
From @data
Pivot ( 
    max(val)
    for valtype in ([A], [B], [C])
) as piv
输出:

1   X1122   JJHJU   NULL
2   POIUY   NULL    YUHGF