gpt4 book ai didi

php - MySQL 数据透视表 - 将行转换为列

转载 作者:行者123 更新时间:2023-11-30 01:04:58 24 4
gpt4 key购买 nike

这是我的表的结构: enter image description here

然后我运行查询

SELECT `date`,`index_name`,`results` FROM `mst_ind` WHERE `index_name` IN ('MSCI EAFE Mid NR USD', 'Alerian MLP PR USD') AND `time_period`='M1'

并得到一个像这样的表格

enter image description here

如何将“index_name”行转换为如下列:

日期 | MSCI EAFE 中期 NR 美元 | Alerian MLP PR 美元

enter image description here

换句话说,我需要每列代表一个索引,每行代表日期结果。据我所知,MySQL 没有数据透视表功能。最简单的方法是什么?

我已经尝试过这段代码,但它生成了一个错误:

SELECT
`date`,
MAX(IF(index_name = 'Alerian MLP PR USD' AND `time_period`='M1', results, NULL)) AS res1,
MAX(IF(index_name = 'MSCI EAFE Mid NR USD' AND `time_period`='M1', results, NULL)) AS res2
FROM
`mst_ind`
GROUP BY `date

我需要在查询级别进行转换 - 而不是 PHP。请提出一个漂亮而优雅的解决方案。谢谢!

最佳答案

尝试

SELECT date,
MAX(CASE WHEN index_name = 'Alerian MLP PR USD' THEN results END) `Alerian MLP PR USD`,
MAX(CASE WHEN index_name = 'MSCI EAFE Mid NR USD' THEN results END) `MSCI EAFE Mid NR USD`
FROM mst_ind
WHERE index_name IN ('MSCI EAFE Mid NR USD', 'Alerian MLP PR USD')
AND time_period = 'M1'
GROUP BY date

示例输出:

|       DATE | ALERIAN MLP PR USD | MSCI EAFE MID NR USD ||------------|--------------------|----------------------|| 1995-01-31 |            -0.0167 |               0.0335 || 1995-02-28 |             0.0128 |               0.0409 || 1995-03-31 |             0.0464 |               0.0286 || 1995-04-28 |             0.0331 |               0.0297 || 1995-05-31 |             0.0069 |               0.0398 |...

这里是SQLFiddle 演示

关于php - MySQL 数据透视表 - 将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com