简体   繁体   English

Oracle SQL-添加CASE语句后“不是按表达式分组”

[英]Oracle SQL - “Not a group by expression” after adding CASE statements

I have long query to which I had to add two new CASE statements - 我有很长的查询,不得不向其中添加两个新的CASE语句-

SELECT nt.COSTCENTER,
s.DAD,
s.DIVISION, 
nt.DISPENSER,
UPPER(nt.TINTERSERIALNBR),
COUNT(*)OVER (PARTITION BY nt.COSTCENTER) AS NumOfDispensers,
nt.CLRNTSYS,
SUM(CASE WHEN
(nt.CLRNTSYS ='CCE' AND (nt.BOOKDATE >= '01-JAN-17' AND nt.BOOKDATE <= '31-DEC-17')) 
THEN nt.GALLONS ELSE 0 END) AS CCEGallons2017,
SUM(CASE WHEN
(nt.CLRNTSYS ='BAC' AND (nt.BOOKDATE >= '01-JAN-17' AND nt.BOOKDATE <= '31-DEC-17'))
THEN nt.GALLONS ELSE 0 END) AS BACGallons2017,
SUM(CASE WHEN
(nt.CLRNTSYS ='CCE' AND (nt.BOOKDATE >= '01-JAN-18' AND nt.BOOKDATE <= '31-DEC-18')) 
THEN nt.GALLONS ELSE 0 END) AS CCEGallons2018,
SUM(CASE WHEN
(nt.CLRNTSYS ='BAC' AND (nt.BOOKDATE >= '01-JAN-18' AND nt.BOOKDATE <= '31-DEC-18'))
THEN nt.GALLONS ELSE 0 END) AS BACGallons2018,
CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END DNR2017,
CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2018' THEN 'YES' ELSE 'NO' END DNR2018
FROM MQ_CDS_NETTRAN nt
INNER JOIN MQCCNSTORE s
ON nt.COSTCENTER = s.COSTCENTER
INNER JOIN TINTER_MASTER tm
ON UPPER(nt.TINTERSERIALNBR) = UPPER(tm.SERIALNBR)
WHERE nt.BOOKDATE >= '01-JAN-17'
AND nt.CLRNTSYS IN ('CCE','BAC')
AND nt.TRANCODE = 'DISP'
AND UPPER(nt.DISPENSER) <> 'BYHAND'
AND UPPER(nt.DISPENSER) <> 'STANDALONE'
AND tm.DECOMMDATE IS NULL
GROUP BY nt.COSTCENTER, nt.DISPENSER, UPPER(nt.TINTERSERIALNBR), nt.CLRNTSYS,
s.DAD, s.DIVISION
ORDER BY nt.COSTCENTER, nt.DISPENSER, UPPER(nt.TINTERSERIALNBR), nt.CLRNTSYS;

These are the two CASE lines I added to the query: 这是我添加到查询中的两条CASE行:

CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END DNR2017,
CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2018' THEN 'YES' ELSE 'NO' END DNR2018

And when I try to run the query, I get "Not a group by expression." 当我尝试运行查询时,出现“不是按表达式分组”。 Prior to adding those two lines, the query ran just fine. 在添加这两行之前,查询运行得很好。 How to best correct this? 如何最好地纠正这个问题?

You need to let CASE WHEN add in group by , Because CASE WHEN isn't aggregate function. 您需要让CASE WHEN添加到group by ,因为CASE WHEN不是聚合函数。

SELECT nt.COSTCENTER,
    s.DAD,
    s.DIVISION, 
    nt.DISPENSER,
    UPPER(nt.TINTERSERIALNBR),
    COUNT(*)OVER (PARTITION BY nt.COSTCENTER) AS NumOfDispensers,
    nt.CLRNTSYS,
    SUM(CASE WHEN
    (nt.CLRNTSYS ='CCE' AND (nt.BOOKDATE >= '01-JAN-17' AND nt.BOOKDATE <= '31-DEC-17')) 
    THEN nt.GALLONS ELSE 0 END) AS CCEGallons2017,
    SUM(CASE WHEN
    (nt.CLRNTSYS ='BAC' AND (nt.BOOKDATE >= '01-JAN-17' AND nt.BOOKDATE <= '31-DEC-17'))
    THEN nt.GALLONS ELSE 0 END) AS BACGallons2017,
    SUM(CASE WHEN
    (nt.CLRNTSYS ='CCE' AND (nt.BOOKDATE >= '01-JAN-18' AND nt.BOOKDATE <= '31-DEC-18')) 
    THEN nt.GALLONS ELSE 0 END) AS CCEGallons2018,
    SUM(CASE WHEN
    (nt.CLRNTSYS ='BAC' AND (nt.BOOKDATE >= '01-JAN-18' AND nt.BOOKDATE <= '31-DEC-18'))
    THEN nt.GALLONS ELSE 0 END) AS BACGallons2018,
    CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END DNR2017,
    CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2018' THEN 'YES' ELSE 'NO' END DNR2018
FROM MQ_CDS_NETTRAN nt
INNER JOIN MQCCNSTORE s ON nt.COSTCENTER = s.COSTCENTER
INNER JOIN TINTER_MASTER tm ON UPPER(nt.TINTERSERIALNBR) = UPPER(tm.SERIALNBR)
WHERE 
        nt.BOOKDATE >= '01-JAN-17'
    AND nt.CLRNTSYS IN ('CCE','BAC')
    AND nt.TRANCODE = 'DISP'
    AND UPPER(nt.DISPENSER) <> 'BYHAND'
    AND UPPER(nt.DISPENSER) <> 'STANDALONE'
    AND tm.DECOMMDATE IS NULL
GROUP BY 
    nt.COSTCENTER, 
    nt.DISPENSER, 
    UPPER(nt.TINTERSERIALNBR),
    nt.CLRNTSYS,
    s.DAD, 
    s.DIVISION,
    CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2017' THEN 'YES' ELSE 'NO' END,
    CASE WHEN to_char(tm.DNRDATE,'YYYY') = '2018' THEN 'YES' ELSE 'NO' END
ORDER BY nt.COSTCENTER, nt.DISPENSER, UPPER(nt.TINTERSERIALNBR), nt.CLRNTSYS;

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

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