[英]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.