【问题标题】:SQL select joining tablesSQL 选择连接表
【发布时间】:2019-08-23 22:24:11
【问题描述】:

如果我在 MySQL 中有一个包含以下数据的表:

id       Name       Value
1          A          4
1          A          5
1          B          8
2          C          9

如何将其转换为以下格式? 这有可能吗?

id         Column   Column   Column    Column   Column    Column
1            A        4         A        5         B        8
2            c        9

【问题讨论】:

  • 如果您能解释一下您对此输出的逻辑是什么,那将会很有帮助。为什么一列中只有A和C分开,另一列中只有B,一列中只有4和9,不同列中只有5和8
  • 我有一个表,其中包含我工作中的活动项目,在另一个表中,我有这些项目的更新,列:日期和 cmets,我试图查看所有更新,其中包含日期和 cmets id 项目只有 1 行
  • 你考虑过CONCAT()函数吗?据我了解,您没有固定的列数,因此如果您返回与特定分隔符合并的字符串并在代码端将其解析回可能会很有用。
  • 您可以使用存储过程来做到这一点,但在应用程序端几乎肯定会容易得多。

标签: mysql sql pivot


【解决方案1】:

您可以使用条件聚合:

select id,
       max(case when seqnum = 1 then name end) as name_1,
       max(case when seqnum = 1 then value end) as value_1,
       max(case when seqnum = 2 then name end) as name_2,
       max(case when seqnum = 2 then value end) as value_2,
       max(case when seqnum = 3 then name end) as name_3,
       max(case when seqnum = 3 then value end) as value_3
from (select t.*,
             row_number() over (partition by id order by value) as seqnum
      from t
     ) t
group by id;

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多