我有一个包含以下信息的数据库表
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`