将行转换为mysql数据库中的列

时间:2014-12-30 04:36:17

标签: mysql

我有一个表格,其中包含所有日期的所有项目值。表名是item_data

╔═════════╦═══════╦═════════════╗
║ item_id ║ value ║ report_date ║
╠═════════╬═══════╬═════════════╣
║     101 ║    50 ║ 2014-10-11  ║
║     102 ║    50 ║ 2014-10-11  ║
║     101 ║   100 ║ 2014-10-12  ║
║     102 ║    11 ║ 2014-10-12  ║
╚═════════╩═══════╩═════════════╝

我有另一个表,其中包含项目名称表名是page_items

╔═════════╦═══════════╗
║ item_id ║ item_name ║
╠═════════╬═══════════╣
║     101 ║ sprite    ║
║     102 ║ egg       ║
╚═════════╩═══════════╝

我的要求是我想显示如下的值

╔═════════════╦════════╦═════╗
║ report_date ║ sprite ║ egg ║
╠═════════════╬════════╬═════╣
║ 2014-10-11  ║     50 ║  50 ║
║ 2014-10-12  ║    100 ║  11 ║
╚═════════════╩════════╩═════╝

任何人都可以帮助我  我正在使用mysql数据库  请告诉我获得此结果的过程

2 个答案:

答案 0 :(得分:1)

您可以将条件聚合maxcase一起使用,按日期分组:

select report_date,
    max(case when item_id = 101 then value end) sprite,
    max(case when item_id = 102 then value end) egg
from item_data
group by report_date

答案 1 :(得分:0)

试试这个:

select ID.`report_date`,
    case (when PI.`item_id` = 101 then PI.`value` end) AS sprite,
    (when PI.`item_id` = 102 then PI.`value` end) AS egg
from item_data ID
JOIN page_items PI (ON PI.`item_id` = ID.`item_id`)
group by ID.`report_date`
相关问题