我们如何针对这种情况编写SQL查询?
该表的结构为;
|房间黑色|数据|
| 1 | A | 12 |
| 2 | A | 13 |
| 1 | B | 14 |
| 3 | B | 15 |
预期产量:
|房间A | B |
| 1 | 12 | 14 |
| 2 | 13 |空|
| 3 | null | 15 |
最佳答案
您可以尝试使用条件聚合
DEMO
select room, max(case when BLOK='A' then DATA end) as A,
max(case when BLOK='B' then DATA end) as B
from tablename
group by room
或尝试使用
PIVOT
select room,pv.* from
tablename
pivot(max(DATA) for BLOK in ([A],[B])) pv
输出:
Room A B
1 12 14
2 13
3 15
对于动态数据透视
declare @sql varchar(max)='',@col_list varchar(8000)=''
set @col_list = (select distinct quotename([BLOK])+',' from tablename
for xml path(''))
set @col_list = left (@col_list,len(@col_list)-1)
set @sql = 'select Room,'+@col_list+' from
tablename
pivot (max([DATA]) for [BLOK] in ('+@col_list+'))pv'
exec(@sql)
FIDDLE FOR DYNAMIC PIVOT
关于sql - 如何创建数据成为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273744/