select
buyer,
max(case when food = 'apple' then 'X' end) apple,
max(case when food = 'banana' then 'X' end) banana,
max(case when food = 'grapes' then 'X' end) grapes,
max(case when food = 'lemon' then 'X' end) lemon
from mytable
group by buyer
order by buyer
2条答案
按热度按时间4jb9z9bj1#
如果处理的是固定的水果列表,则独立于数据库的解决方案是条件聚合:
如果列表不是固定的,那么需要动态sql。我不认为这符合问题中描述的纯sql的描述。
baubqpgj2#
声明@cols为nvarchar(max),@query为nvarchar(max);
set@cols=stuff((从food c中选择distinct'、'+quotename(c.food)作为xml路径(''),type).value(''''、'nvarchar(max)'),1,1,')
set@query='从买家数据透视中选择*(计数('+@cols+')p中的食物'
执行(@query)