【问题标题】:How to transform rows into columns having no column with unique values?如何将行转换为没有具有唯一值的列的列?
【发布时间】:2011-07-12 14:28:32
【问题描述】:

我正在尝试将一些行转换为 MySQL 中的列。我知道以前有人问过并回答过,比如here

我的问题是,我的行中没有可以应用“if”构造的内容。 (至少我是这么认为的。) 例如。对于以下输入,

2  5  1000
2  6  2000

我可以运行这个查询:

INSERT INTO SUMMARY
  (user_id,valueA,valueB) 
  SELECT d.user_id,
         MAX(CASE WHEN d.code = 5 THEN d.value ELSE NULL END),
         MAX(CASE WHEN d.code = 6 THEN d.value ELSE NULL END),
    FROM DETAILS d
GROUP BY d.user_id

并得到这个输出:

2  1000  2000

但我的问题是,我的输入是这样的:

2  6  1000
2  6  2000

(第二列中的值不是唯一的。) 我仍然需要相同的输出,即:

2  1000  2000

可以在 MySQL 中完成吗?如果是,有人可以帮我解决这个问题吗?

【问题讨论】:

  • 能否提供您的表格的 DDL 脚本?你知道给定的“user_id”会有多少个“值”,即最终结果集中有多少列?或者它是一个随机数?在您的示例中,您怎么知道 1000 必须在第一列,2000 在第二列?
  • 好吧,我不确定,但现在我们可以假设每个 user_id 最多有 10 行。

标签: mysql database pivot pivot-table


【解决方案1】:

好吧,如果您不知道数据透视表中有多少列,也没有一个值来决定给定列中应该包含的值,我可以推荐的最佳解决方案是使用GROUP_CONCAT 函数,然后在你的代码中做一些解析:

SELECT d.user_id, GROUP_CONCAT(
    d.value SEPARATOR ','
  ) AS val
FROM details d
GROUP BY d.user_id;

【讨论】:

  • 是的,尝试同样的事情。想知道有没有更好的办法。
猜你喜欢
  • 1970-01-01
  • 2018-02-04
  • 2021-10-10
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多