【问题标题】:MySQL Merge Two SELECT Queries With CASE On One TableMySQL 在一张表上合并两个带有 CASE 的 SELECT 查询
【发布时间】:2015-03-24 22:24:35
【问题描述】:

我想将两个查询合并为一个完整的查询。我需要将两个查询分组在一个聚合字段 (MFG) 上。我假设您使用JOIN,但它在同一张桌子上并使用CASE,所以我不确定它是如何工作的。

第一次查询(2015 年)

SELECT 
    CASE
        WHEN ITEM LIKE '%1%' THEN 'MFG1'
        WHEN ITEM LIKE '%2%' THEN 'MFG2'
        WHEN ITEM LIKE '%3%' THEN 'MFG3'
        ELSE ''
    END AS MFG,
    SUM(COST) AS Cost2015
FROM
    table
WHERE
    TRANS_DATE BETWEEN '2015-12-01' AND '2015-12-31'
GROUP BY MFG

第二次查询(2014 年)

SELECT 
    CASE
        WHEN ITEM LIKE '%1%' THEN 'MFG1'
        WHEN ITEM LIKE '%2%' THEN 'MFG2'
        WHEN ITEM LIKE '%3%' THEN 'MFG3'
        ELSE ''
    END AS MFG,
    SUM(COST) AS Cost2014
FROM
    table
WHERE
    TRANS_DATE BETWEEN '2014-12-01' AND '2014-12-31'
GROUP BY MFG

期望的结果

MFG  |  Cost2015  |  Cost2014
MFG1 |   1500     |     0
MFG2 |   1000     |    1200
MFG3 |     0      |    3600
     |    100     |     15

【问题讨论】:

    标签: mysql select join merge union


    【解决方案1】:

    你可以在SUM()中使用CASE

    SELECT 
        CASE
            WHEN ITEM LIKE '%1%' THEN 'MFG1'
            WHEN ITEM LIKE '%2%' THEN 'MFG2'
            WHEN ITEM LIKE '%3%' THEN 'MFG3'
            ELSE ''
        END AS MFG,
        SUM(CASE WHEN TRANS_DATE BETWEEN '2014-12-01' AND '2014-12-31' THEN COST ELSE 0 END) AS Cost2014,
        SUM(CASE WHEN TRANS_DATE BETWEEN '2015-12-01' AND '2015-12-31' THEN COST ELSE 0 END) AS Cost2015
    FROM
        TABLE
    WHERE
        TRANS_DATE BETWEEN '2014-12-01' AND '2015-12-31'
    GROUP BY MFG
    

    【讨论】:

    • 谢谢,我最初的几个测试似乎都在工作,让我在接受之前再运行一些测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2012-11-05
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多