如何基于另一个可以动态更新的表的信息,使用mysql实现Pivot属性(或输出)
我想将列数据表示为表中的行 我有3个输入表如何基于另一个可以动态更新的表的信息,使用mysql实现Pivot属性(或输出),mysql,Mysql,我想将列数据表示为表中的行 我有3个输入表 Person Id | Name | age | Country ----- | :----: | :----: | :-----: 1 | anil | 20 | India 2 | Raggu | 21 | India 3 | IRSHAD| 22 | India 4 | Sravas| 20 | India
Person
Id | Name | age | Country
----- | :----: | :----: | :-----:
1 | anil | 20 | India
2 | Raggu | 21 | India
3 | IRSHAD| 22 | India
4 | Sravas| 20 | India
5 | . | . | .
6 | . | . | .
7 | . | . | .
我需要一张桌子
Gim_Result
Name | Height| Weight | Fat |....
:----: | :----: | :-----:|:-----: |
anil | 6 | 60 | null | .....
Raggu | null | null | 120 | .....
IRSHAD| null | null | null | ....
Sravas| 5.8 | null | null | ....
. | . | . | . | .....
. | . | . | . | .....
. | . | . | . | .....
我需要一个查询,这样它将产生如上表所示的结果
它在结果表中为测试表中的每个不同测试动态生成新列
我认为我们可以在SQLServer中使用pivot生成这种类型的结果
但是我需要使用mysql生成这个结果…基本原理如下:
SELECT
EntityID
, SUM(CASE WHEN PivotColumn = 'PivotColumnValue1' THEN PivotValue ELSE NULL END)
, SUM(CASE WHEN PivotColumn = 'PivotColumnValue2' THEN PivotValue ELSE NULL END)
/* ... */
, SUM(CASE WHEN PivotColumn = 'PivotColumnValueN' THEN PivotValue ELSE NULL END)
FROM
MyTable
GROUP BY
EntityID
;
当然,您可以使用您选择的任何聚合函数。可能的重复项在我的情况下,我不知道测试表中存在哪些字段,以及何时在测试表中添加新测试。我的静态查询也会自动生成输出表,并将新测试作为列。在我的情况下,我不知道测试表中存在哪些字段以及何时添加新测试测试表我的查询自动生成带有新测试列的输出表sql Server中没有动态透视解决方案。如果要实现它,就必须使用动态sql。
Gim_Result
Name | Height| Weight | Fat |....
:----: | :----: | :-----:|:-----: |
anil | 6 | 60 | null | .....
Raggu | null | null | 120 | .....
IRSHAD| null | null | null | ....
Sravas| 5.8 | null | null | ....
. | . | . | . | .....
. | . | . | . | .....
. | . | . | . | .....
SELECT
EntityID
, SUM(CASE WHEN PivotColumn = 'PivotColumnValue1' THEN PivotValue ELSE NULL END)
, SUM(CASE WHEN PivotColumn = 'PivotColumnValue2' THEN PivotValue ELSE NULL END)
/* ... */
, SUM(CASE WHEN PivotColumn = 'PivotColumnValueN' THEN PivotValue ELSE NULL END)
FROM
MyTable
GROUP BY
EntityID
;