繁体   English   中英

将多行合并为一行

[英]Combine Multiple Row into One Row

尝试查询mysql时出现问题。 我有一些像下面的数据:

在此处输入图片说明

但是同时,我想在一个日期中加入所有数据,就像这样:

在此处输入图片说明

有人可以帮助我吗?

这是我的查询下面:

SELECT DATE_FORMAT(PRAY_TIME, '%d-%m-%Y') 'SCH_DATE',
IF(PRAY_SCH = 'Subuh', LEFT(RIGHT(DATE_SUB(PRAY_TIME, INTERVAL 17 HOUR), 8), 5), '-') 'SUBUH',
IF(PRAY_SCH = 'Dzuhur', LEFT(RIGHT(DATE_SUB(PRAY_TIME, INTERVAL 5 HOUR), 8), 5), '-') 'DZUHUR',
IF(PRAY_SCH = 'Ashar', LEFT(RIGHT(DATE_ADD(PRAY_TIME, INTERVAL 7 HOUR), 8), 5), '-') 'ASHAR',
IF(PRAY_SCH = 'Maghrib', LEFT(RIGHT(DATE_ADD(PRAY_TIME, INTERVAL 7 HOUR), 8), 5), '-') 'MAGHRIB',
IF(PRAY_SCH = 'Isya', LEFT(RIGHT(DATE_ADD(PRAY_TIME, INTERVAL 7 HOUR), 8), 5), '-') 'ISYA'
FROM T_TABLE_ADZAN_2018 WHERE ID_CITY = '1'
ORDER BY DATE(PRAY_TIME) ASC;

您可以使用聚合:

SELECT DATE_FORMAT(PRAY_TIME, '%d-%m-%Y') as SCH_DATE,
       MAX(CASE WHEN PRAY_SCH = 'Subuh', LEFT(RIGHT(DATE_SUB(PRAY_TIME, INTERVAL 17 HOUR), 8), 5) END) as SUBUH,
       MAX(CASE WHEN PRAY_SCH = 'Dzuhur', LEFT(RIGHT(DATE_SUB(PRAY_TIME, INTERVAL 5 HOUR), 8), 5) END) as DZUHUR,
       MAX(CASE WHEN PRAY_SCH = 'Ashar', LEFT(RIGHT(DATE_ADD(PRAY_TIME, INTERVAL 7 HOUR), 8), 5) END) as ASHAR,
       MAX(CASE WHEN PRAY_SCH = 'Maghrib', LEFT(RIGHT(DATE_ADD(PRAY_TIME, INTERVAL 7 HOUR), 8), 5) END) as MAGHRIB,
       MAX(CASE WHEN PRAY_SCH = 'Isya', LEFT(RIGHT(DATE_ADD(PRAY_TIME, INTERVAL 7 HOUR), 8), 5) END) as ISYA
FROM T_TABLE_ADZAN_2018
WHERE ID_CITY = 1
GROUP BY DATE_FORMAT(PRAY_TIME, '%d-%m-%Y') ASC;

笔记:

  • GROUP BY键应该是您SELECT的键。
  • 列别名不要使用单引号。 仅对字符串和日期常量使用单引号。
  • MAX()的使用应做您想要的。
  • 大概ID_CITY是一个数字,因此将其与数字而不是字符串进行比较。
  • CASE表达式是ANSI标准; IF()是MySQL特定的。

您可以这样尝试:

select
    DATE_FORMAT(a.PRAY_TIME, '%d-%m-%Y') 'SCH_DATE',
    LEFT(RIGHT(DATE_SUB(b.PRAY_TIME, INTERVAL 17 HOUR), 8), 5) as SUBUH,
    LEFT(RIGHT(DATE_SUB(c.PRAY_TIME, INTERVAL 5 HOUR), 8), 5) as DZUHUR,
    LEFT(RIGHT(DATE_ADD(PRAY_TIME, INTERVAL 7 HOUR), 8), 5) as MAGHRIB,
    LEFT(RIGHT(DATE_ADD(PRAY_TIME, INTERVAL 7 HOUR), 8), 5) as ISYA
    from T_TABLE_ADZAN_2018 as a 
    left join T_TABLE_ADZAN_2018 as b on DATE_FORMAT(a.PRAY_TIME,'%d-%m-%Y')=DATE_FORMAT(a.PRAY_TIME,'%d-%m-%Y') and b.PRAY_SCH='Dzuhur'
    left join T_TABLE_ADZAN_2018 as c on DATE_FORMAT(a.PRAY_TIME,'%d-%m-%Y')=DATE_FORMAT(c.PRAY_TIME,'%d-%m-%Y') and b.PRAY_SCH='Ashar'
    left join T_TABLE_ADZAN_2018 as d on DATE_FORMAT(a.PRAY_TIME,'%d-%m-%Y')=DATE_FORMAT(d.PRAY_TIME,'%d-%m-%Y') and b.PRAY_SCH='Maghrib'
    left join T_TABLE_ADZAN_2018 as e on DATE_FORMAT(a.PRAY_TIME,'%d-%m-%Y')=DATE_FORMAT(e.PRAY_TIME,'%d-%m-%Y') and b.PRAY_SCH='Maghrib' WHERE a.ID_CITY = '1'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM