php - mysql 在多个返回列中显示数据库列

标签 php mysql database

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

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/

相关文章:

php - 无法将文件 CSV 上传到托管数据库

database - 是否有标准的电子商务数据库架构来将折扣/税收/礼券应用于产品?

php - 具有多个选择选项的 MySQL 查询

php - 如何使用 jointable 进行 dql 查询?

php - Google Analytics API - 无需使用 "consent screen"进行身份验证即可获取访问 token

mysql - SQLITE 查询基于列的值检索列名

php - 如何使用 jQuery 通过 Ajax 提交表单,然后获取提交到的页面的输出?

php - ZF2 查询结果不正确

mysql - 在数据库中做灵活列的正确方法是什么?

php - mySql自定义选择和显示