题目:数据库中有一张如下所示的表,表名为sales。
年 | 季度 | 销售量 |
---|---|---|
1991 | 1 | 11 |
1991 | 2 | 12 |
1991 | 3 | 13 |
1991 | 4 | 14 |
1992 | 1 | 21 |
1992 | 2 | 22 |
1992 | 3 | 23 |
1992 | 4 | 24 |
要求:写一个SQL语句查询出如下所示的结果。
年 | 一季度 | 二季度 | 三季度 | 四季度 |
---|---|---|---|---|
1991 | 11 | 12 | 13 | 14 |
1992 | 21 | 22 | 23 | 24 |
这里只贴mysql中查询答案,最近开发用的都是mysql数据库。貌似oracle有更简洁的写法。
最简单的方法,子查询:
SELECT s.`year`,
(SELECT sa.`saleAmount`FROM sales sa WHERE sa.`year`=s.`year` AND sa.`quarter`=1) AS '第一季度',
(SELECT sa.`saleAmount`FROM sales sa WHERE sa.`year`=s.`year` AND sa.`quarter`=2) AS '第二季度',
(SELECT sa.`saleAmount`FROM sales sa WHERE sa.`year`=s.`year` AND sa.`quarter`=3) AS '第三季度',
(SELECT sa.`saleAmount`FROM sales sa WHERE sa.`year`=s.`year` AND sa.`quarter`=4) AS '第四季度'
FROM sales s GROUP BY s.`year`
这是参考别人的写法,用case when then
SELECT s.`year` AS '年度',
(CASE WHEN s.`quarter`=1 THEN s.`saleAmount` END) AS '第一季度',
(CASE WHEN s.`quarter`=1 THEN s.`saleAmount` END) AS '第二季度',
(CASE WHEN s.`quarter`=1 THEN s.`saleAmount` END) AS '第三季度',
(CASE WHEN s.`quarter`=1 THEN s.`saleAmount` END) AS '第四季度'
FROM sales s GROUP BY s.`year`