在循环内部运行CASE语句

时间:2018-05-31 05:21:43

标签: mysql sql loops case

我有一个看起来有点脏的以下查询:

SELECT id, title, 
    SUM(CASE WHEN day = 1 THEN lunchStatus ELSE 0 END) '1',
    SUM(CASE WHEN day = 2 THEN lunchStatus ELSE 0 END) '2',
    SUM(CASE WHEN day = 3 THEN lunchStatus ELSE 0 END) '3',
    SUM(CASE WHEN day = 4 THEN lunchStatus ELSE 0 END) '4',
    SUM(CASE WHEN day = 5 THEN lunchStatus ELSE 0 END) '5',
    SUM(CASE WHEN day = 6 THEN lunchStatus ELSE 0 END) '6',
    SUM(CASE WHEN day = 7 THEN lunchStatus ELSE 0 END) '7',
    SUM(CASE WHEN day = 8 THEN lunchStatus ELSE 0 END) '8',
    SUM(CASE WHEN day = 9 THEN lunchStatus ELSE 0 END) '9',
    SUM(CASE WHEN day = 10 THEN lunchStatus ELSE 0 END) '10',
    SUM(CASE WHEN day = 11 THEN lunchStatus ELSE 0 END) '11',
    SUM(CASE WHEN day = 12 THEN lunchStatus ELSE 0 END) '12',
    SUM(CASE WHEN day = 13 THEN lunchStatus ELSE 0 END) '13',
    SUM(CASE WHEN day = 14 THEN lunchStatus ELSE 0 END) '14',
    SUM(CASE WHEN day = 15 THEN lunchStatus ELSE 0 END) '15',
    SUM(CASE WHEN day = 16 THEN lunchStatus ELSE 0 END) '16',
    SUM(CASE WHEN day = 17 THEN lunchStatus ELSE 0 END) '17',
    SUM(CASE WHEN day = 18 THEN lunchStatus ELSE 0 END) '18',
    SUM(CASE WHEN day = 19 THEN lunchStatus ELSE 0 END) '19',
    SUM(CASE WHEN day = 20 THEN lunchStatus ELSE 0 END) '20',
    SUM(CASE WHEN day = 21 THEN lunchStatus ELSE 0 END) '21',
    SUM(CASE WHEN day = 22 THEN lunchStatus ELSE 0 END) '22',
    SUM(CASE WHEN day = 23 THEN lunchStatus ELSE 0 END) '23',
    SUM(CASE WHEN day = 24 THEN lunchStatus ELSE 0 END) '24',
    SUM(CASE WHEN day = 25 THEN lunchStatus ELSE 0 END) '25',
    SUM(CASE WHEN day = 26 THEN lunchStatus ELSE 0 END) '26',
    SUM(CASE WHEN day = 27 THEN lunchStatus ELSE 0 END) '27',
    SUM(CASE WHEN day = 28 THEN lunchStatus ELSE 0 END) '28',
    SUM(CASE WHEN day = 29 THEN lunchStatus ELSE 0 END) '29',
    SUM(CASE WHEN day = 30 THEN lunchStatus ELSE 0 END) '30',
    SUM(CASE WHEN day = 31 THEN lunchStatus ELSE 0 END) '31'
FROM
(
    SELECT m.id, m.title, l.month, l.day, l.lunchStatus
FROM `months` m 
LEFT OUTER JOIN 
(SELECT MONTHNAME(issuedDateTime) as month, DAY(issuedDateTime) as day, lunchStatus, userId
 FROM lunch_status 
 WHERE userId = 134) l 
 ON m.title = l.month
    ) as s
    GROUP BY title
    ORDER BY id

我按预期得到了结果集。

但是我想整理和优化脚本,因此在整齐的循环中运行那些长CASE语句。使用数据库不是我的强项。

非常感谢任何帮助。感谢。

0 个答案:

没有答案