gpt4 book ai didi

sql - MySQL 列值透视

转载 作者:行者123 更新时间:2023-11-29 15:03:24 25 4
gpt4 key购买 nike

我有一个 MySQL InnoDB 表,布局如下:id (int)、run_id (int)、element_name (varchar)、value (text)、line_order、column_order

`MyDB`.`MyTable` (
`id` bigint(20) NOT NULL,
`run_id` int(11) NOT NULL,
`element_name` varchar(255) NOT NULL,
`value` text,
`line_order` int(11) default NULL,
`column_order` int(11) default NULL

它用于存储 Java 程序生成的数据,该数据用于以 CSV 格式输出,即 line_order 和 column_order。假设我有 4 个条目(根据表格描述):

1,1,'ELEMENT 1','A',0,0
2,1,'ELEMENT 2','B',0,1
3,1,'ELEMENT 1','C',1,0
4,1,'ELEMENT 2','D',1,1

我想在报告 View 中旋转这些数据,使其看起来更像 CSV,输出如下所示:

---------------------
|ELEMENT 1|ELEMENT 2| <--- Element Name
---------------------
| A | B | <--- Value From line_order = 0
---------------------
| C | D | <--- Value From line_order = 1
---------------------

传入的数据极其动态;它可以是任何顺序,可以是 900 多个不同元素中的任何一个,并且值可以是任何值。运行 ID 将它们全部联系在一起,行和列的顺序基本上让我知道用户希望数据按顺序返回到哪里。我希望它按显示矩阵中的行和列顺序进行排序/分组。

最佳答案

您可以通过自连接来做到这一点:

select e1.element_name, e1.value, e2.value
from MyTable e1
inner join MyTable e2
on e1.element_name = e2.element_name
and e2.line_order = 1
where e1.line_order = 0

from 选择 line_order = 1,内连接选择 line_order = 2

如果您想返回仅具有一个 line_order 的元素,请将内联接切换为交叉联接

在回复您的评论时,您可以写出固定数量的元素,例如:

select
line_order
, max(case when element_name = 'element 1' then value end) as Element1Value
, max(case when element_name = 'element 2' then value end) as Element2Value
, max(case when element_name = 'element 3' then value end) as Element3Value
, ...
from MyTable
group by line_order

max() 构造假定 (element_name, line_order) 是唯一的。

关于sql - MySQL 列值透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671661/

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