mysql - 带有基于值的新列的 SELECT 语句
问题描述
我有一张这样的桌子:
month year id amount
1 2001 1 345.5
2 2001 1 123.5
3 2001 1 654.5
4 2001 1 542.5
5 2001 1 123.5
6 2001 1 123.5
7 2001 1 654.5
8 2001 1 654.5
9 2001 1 789.3
10 2001 1 654.5
11 2001 1 123.5
12 2001 1 654.5
1 2002 1 123.5
2 2002 1 123.5
3 2002 1 654.5
...
我想用一个 SELECT 语句来改变它,所以它看起来像这样:
month id 2001 2002 2003 ...
1 1 345.5 123.5
2 1 123.5 123.5
3 1 654.5 654.5
4 1 542.5 ...
5 1 123.5
6 1 123.5
7 1 654.5
8 1 654.5
9 1 789.3
10 1 654.5
11 1 123.5
12 1 654.5
我尝试了这样的 SELECT 语句:
SELECT
month, year, id, amount, sum(amount_order) AS YEAR(getdate())-1
FROM
receipts
WHERE
id = '1'
AND year BETWEEN YEAR(getdate())-5 AND YEAR(getdate())-1
GROUP BY
month, year, id
因为我想将表名设置为过去5年到过去1年的值(这里只有前一年的列名)。甚至可以用一个 SELECT 语句来做到这一点吗?
解决方案
使用条件聚合:
select month, id,
sum(case when year = 2001 then amount else 0 end) as amount_2001,
sum(case when year = 2002 then amount else 0 end) as amount_2002,
. . .
from t
group by month, id;
推荐阅读
- c - 使用全局变量的线程问题
- kibana - Kibana filter regex 'string starts with' doesn't work
- r - 闪亮应用程序中的 Source()
- python - Scraping: SSL: CERTIFICATE_VERIFY_FAILED error for http://en.wikipedia.org
- sails.js - 如何在 Sails JS 控制器中操作 JSON 数据
- ruby-on-rails - Rails - 无法自动加载常量 - Transaction Express API 调用
- wso2is - 有没有办法在 Identity Server 中跟踪谁最后通过 IDP 访问资源?
- r - 使用 cdo 的气候数据趋势的显着性价值
- android-studio - 如何找到 Flutter SDK 的路径
- azure - Azure: Service principal user best practice with Terraform