我有一个包含以下信息的数据库表
ID代码ID项目ID周
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;
请参阅fiddle here .
编辑
如果同一周有多个项目,可以使用 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;
关于php - mysql 在多个返回列中显示数据库列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17890157/