我有一个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
它用于存储由用于以CSV格式输出的Java程序生成的数据,因此存储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
我想在视图中透过这些数据进行报告,这样看起来就像CSV一样,输出看起来像这样:
---------------------
|ELEMENT 1|ELEMENT 2| <--- Element Name
---------------------
| A | B | <--- Value From line_order = 0
---------------------
| C | D | <--- Value From line_order = 1
---------------------
进入的数据非常动态;它可以是任何顺序,可以是900多种不同元素中的任何一种,价值可以是任何东西。运行ID将它们联系在一起,行和列顺序基本上让我知道用户希望数据按顺序返回的位置。我希望它在显示的矩阵中按行和列顺序排序/分组。
答案 0 :(得分:1)
你可以通过自我加入来做到这一点:
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的元素,请将inner join
切换为cross join
。
在回复您的评论时,您可以写出固定数量的元素,例如:
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)
是唯一的。