我有一个类似的架构:
[ad_id] . [name] . [valueofname]
1 . name . "brian"
1 . age . "23"
2 . job . "IT"
2 . name . "Jack"
行名称包含多个值:age
,name
,birthday
,job
,age
我想把它转换成这个:
[ad_id] . [name] . [age] . [birthday] . [job]
[valueofname] [valueofname] [valueofname] [valueofname]
我已经为每一行完成了查询:
select * from where name='name'
select * from where name='age'
select * from where name='job'
我看到了示例SQL Server : Columns to Rows。但这与我的问题相反。
您是否有任何关于在性能方面制作可扩展查询的建议?
答案 0 :(得分:1)
您可以使用条件聚合:
select ad_id,
max(case when name = 'name' then valueofname end) as name,
max(case when name = 'age' then valueofname end) as age,
max(case when name = 'birthday' then valueofname end) as birthday,
max(case when name = 'job' then valueofname end) as job
from t
group by ad_id;
在SQL Server中,您还可以使用pivot
执行类似操作。