Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将多行合并为一行_Mysql_Sql - Fatal编程技术网

Mysql 将多行合并为一行

Mysql 将多行合并为一行,mysql,sql,Mysql,Sql,我在尝试查询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', LEF

我在尝试查询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;
注:

  • 分组依据
    键应该是您选择的键
  • 不要对列别名使用单引号。仅对字符串和日期常量使用单引号
  • 使用
    MAX()
  • 大概,
    ID\u CITY
    是一个数字,所以将其与数字进行比较,而不是字符串
  • CASE
    表达式是
    ANSI
    标准
    IF()
    是特定于MySQL的

您可以使用聚合:

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;
注:

  • 分组依据
    键应该是您选择的键
  • 不要对列别名使用单引号。仅对字符串和日期常量使用单引号
  • 使用
    MAX()
  • 大概,
    ID\u 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'
您可以这样尝试:

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'

你确定你想要的输出是正确的吗?这个问题源于糟糕的设计。数据库表不是电子表格。不要将输入/输出数据作为图像发布。使用文本!从文本生成测试数据要容易得多。从输入到输出的规则是什么?你的问题不完整。@CraigYoung对不起,伙计……你确定吗,你想要的输出是正确的?这个问题源于糟糕的设计。数据库表不是电子表格。不要将输入/输出数据作为图像发布。使用文本!从文本生成测试数据要容易得多。从输入到输出的规则是什么?你的问题不完整。@CraigYoung抱歉伙计。。。