0

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

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

任何想法我该怎么做?谢谢你。

4

2 回答 2

0

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

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;
于 2013-07-26T20:11:42.400 回答
0
SELECT COUNT(*) ,`CodeID`,`Week` FROM table_name GROUP BY `CodeID`
于 2013-07-26T20:13:29.100 回答