捐款表tb_donation的结构如下:
id name direction amount
1 a 地震 200
2 a 旱灾 400
3 a 地震 400
5 b 地震 200
9 b 旱灾 200
11 c 地震 200
... ... ... ...
... ... ... ...
... ... ... ...
要求:统计捐款人的各类捐款额
如:
name 地震 旱灾
a 600 400
... ... ...
也就是将行转换成列显示出来
这里使用了一个函数case when来实现,有点像编程语言中的case...switch
SELECT NAME ,SUM(CASE direction WHEN '地震' then amount end) as 地震,
SUM(CASE direction WHEN '旱灾' then amount end) as 旱灾
FROM tb_donation td
GROUP BY td.[name]
为了便于理解,可写成:
SELECT NAME ,SUM(CASE WHEN direction='地震' then amount end) as 地震,
SUM(CASE WHEN direction='旱灾' then amount end) as 旱灾
FROM tb_donation td
GROUP BY td.[name]
显示结果:
name 地震 旱灾
chenzi NULL 800
成子 NULL 500
杨俊成 1200 200
分析:
其中case表示这是一个列的条件,其中可以包含多个when,这个和普通编程语言中的case相似,when和switch相似
如:
case when 条件1 then 结果1
when 条件2 then 结果2
....................................
else
end --end表示结束case