【问题标题】:MySQL rows into columnsMySQL 行成列
【发布时间】:2015-09-24 15:50:03
【问题描述】:

对于我的一个项目,我面临一个独特的问题

当前表输出:

CaseKey CustomField Fruits  Electronics Sports

1       10320       Apples  null        null
1       10864       null    Laptops     null
1       10471       null    null        cricket
2       10320       Oranges null        null
2       10864       null    TV          null
2       10471       null    null        baseball

我想要的表结构是按 CaseKey 分组

CaseKey Fruits  Electronics Sports
1       Apples  Laptops     Cricket
2       Oranges TV          BaseBall

当前查询:

select j.pkey as CaseKey,cfv.customfield,
(CASE   
            WHEN cfv.customfield=10320
            THEN cfv.customvalue
        END)   Fruits,
        (CASE
            WHEN cfv.customfield=10864
            THEN cfv.customvalue
        END) AS Electronics,
        (
        CASE
            WHEN cfv.customfield=10310
            THEN cfv.customvalue
        END)Sports,


from 

basetable j

left join  customfieldvalue cfv on j.id=cfv.issue


       and cfv.customfield in (10320,10864,10471)

-- group by j.id

表结构:基表

ID     CaseKey
 4000  1
 4001  2

自定义字段值

ID ISSUE CUSTOMFIELD CUSTOMVALUE

1  4000  10320       Apples
2  4000  10864       Laptops
3  4000  10471       Cricket
4  4001  10320       Oranges
5  4001  10864       TV
6  4001  10471       BaseBall

你能告诉我如何达到这个结果吗?我想在 Tableau 中将这个查询作为 CustomSQL 运行,所以不确定动态 SQL、存储过程等高级 SQL 是否可以在那里工作。寻找可以实现此结果的传统 SQL。

【问题讨论】:

  • 你能分享一下你的表结构吗?或者为它创建一个 sql fiddle。
  • 嗨@SureshKamrushi:我添加了结构。你能帮忙吗

标签: mysql dynamic pivot


【解决方案1】:

你能试试这个查询吗:(它对我有用,不能用 crate fiddle..)

    SELECT CaseKey, CustomField, 
     IF(  `Fruits` IS NOT NULL ,  `Fruits` ,  (IF (`Electronics` IS NOT NULL,`Electronics`,`Sports` )) ) AS T
    FROM TableName

【讨论】:

  • 这将创建一个单列。但我希望 Fruits、Electronics 和 Sports 在我的最终输出中成为三个独立的列。你能提供一个建议吗
  • 查询也应该按 CaseKey 分组
【解决方案2】:

你可以像这样使用子查询:

select
    CaseKey,
    (select customvalue from customfieldvalue where issue = b.id and customfield = 10320) as Fruits,
    (select customvalue from customfieldvalue where issue = b.id and customfield = 10864) as Electronics,
    (select customvalue from customfieldvalue where issue = b.id and customfield = 10471) as Sports
from
    basetable as b

输出你想要的格式:

+---------+---------+-------------+----------+
| CaseKey | Fruits  | Electronics | Sports   |
+---------+---------+-------------+----------+
|       1 | Apples  | Laptops     | Cricket  |
|       2 | Oranges | TV          | Baseball |
+---------+---------+-------------+----------+

还提供Fiddle 风味。

【讨论】:

    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多