0

我尝试并阅读了许多帖子,但我仍然无法弄清楚如何处理此请求:

我有一张这样的桌子:

+-----+------+------+
|设备|期间| 日期 |
+-----+------+------+
|A |1 |2011 年 1 月 1 日|
+-----+------+------+
|A |2 |2/1/11|
+-----+------+------+
|B |1 |3/1/11|
+-----+------+------+
|B |2 |4/1/11|
+-----+------+------+

我想看到这样的输出:

+--------+--------+--------+
|设备|第 1 期|第 2 期|
+--------+--------+--------+
|A |1/1/11 |2/1/11 |
+--------+--------+--------+
|B |3/11/11 |4/1/11 |
+--------+--------+--------+

帮帮我,谢谢你:)

4

2 回答 2

1

您可以在此处使用旋转逻辑:

SELECT
    Device,
    MAX(CASE WHEN PERIOD = 1 THEN DATE END) AS PERIOD1,
    MAX(CASE WHEN PERIOD = 2 THEN DATE END) AS PERIOD2
FROM yourTable
GROUP BY
    Device
ORDER BY
    Device;
于 2019-12-26T02:23:24.007 回答
0

如果您正在寻找动态列,我们需要先使用group_concat()函数生成这些字符串列。然后将生成的列字符串添加到您的原始查询中。

生成的sql字符串:

select Device, max(case when PERIOD = '1' then DATE end) AS `PERIOD 1`,max(case when PERIOD = '2' then DATE end) AS `PERIOD 2` 
        from test 
        group by Device

完整脚本:

set @strsql = '';
select
  group_concat(distinct
    concat(
      'max(case when PERIOD = ''',
      PERIOD,
      ''' then DATE end) AS `PERIOD ',
      PERIOD, '`'
    )
  ) into @strsql
from test;

set @strsql = concat('select Device, ', @strsql, ' 
        from test 
        group by Device');

select @strsql;

prepare stmt from @strsql;
execute stmt;
deallocate prepare stmt;

试试dbfiddle

于 2019-12-26T02:43:55.500 回答