繁体   English   中英

MySQL在多个返回的列中显示数据库列

[英]mysql show db column in multiple returned columns

我有一个包含以下信息的数据库表

ID CodeID ItemID星期
1 1 1 1
2 1 4 2
3 2 1 1
4 2 2 2

我希望按代码ID对查询结果进行分组。 但是我想要一个新的列来显示每个星期的ItemID。

输出示例
CodeID第1周第2周
1 1 4
2 1 2

有什么想法可以做到吗? 谢谢。

如果您已经知道一周只有两个值,则可以使用以下查询:

SELECT
  CodeID,
  MAX(CASE WHEN Week=1 THEN ItemID END) Week1,
  MAX(CASE WHEN Week=2 THEN ItemID END) Week2
FROM
  yourtable
GROUP BY
  CodeID

但是如果周数未知,则应使用动态查询,如下所示:

SELECT
  CONCAT(
    'SELECT CodeID,',
    GROUP_CONCAT(
      DISTINCT
      CONCAT('MAX(CASE WHEN Week=', Week, ' THEN ItemID END) Week', Week)),
    ' FROM yourtable GROUP BY CodeID;')
FROM
  yourtable
INTO @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;

请看这里的小提琴

编辑

如果同一周中有多个项目,则可以使用GROUP_CONCAT聚合函数而不是MAX:

SELECT
  CodeID,
  GROUP_CONCAT(DISTINCT CASE WHEN Week=1 THEN ItemID END) Week1,
  GROUP_CONCAT(DISTINCT CASE WHEN Week=2 THEN ItemID END) Week2
FROM
  yourtable
GROUP BY
  CodeID;
SELECT COUNT(*) ,`CodeID`,`Week` FROM table_name GROUP BY `CodeID`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM