2013-02-15 89 views
2

我想排除GROUP BY子句中的一個術語,該術語阻止我將術語彙總在一起。奇怪的是,我在case語句中使用了導致這種情況的術語,而查詢仍希望我在group by子句中使用它,否則會產生錯誤。如何解決這個問題?GROUP BY子句錯誤

更具體地說:在SELECT子句中的案例中使用的vr.krebel強制我也添加它GROUP BY。如何避免這種情況?

SELECT vr.ktonr, 
     vr.foretagkod, 
     '' AS persign, 
     '' AS TYPE, 
     NULL, 
     1 AS antal, 
     SUM(vr.debbel-vr.krebel), 
     0, 
     vr.kostbar, 
     vr.koststallekod, 
     vr.projcode, 
     vr.redovisnar, 
     vr.period, 
     'Allocated vouchers' AS artbeskr, 
     ko.ktobeskr AS kodescr, 
     CASE 
      WHEN ((vr.ktonr LIKE '9600' 
        OR vr.ktonr LIKE '3%') 
       AND (vr.krebel>0)) THEN 'Revenues' 
      ELSE 'Costs' 
     END 
FROM vr 
INNER JOIN ko ON ko.ktonr=vr.ktonr 
AND ko.redovisnar=datepart(YEAR,vr.bokfdat) 
AND ko.foretagkod=vr.foretagkod 
WHERE vr.foretagkod = 300 
    AND vr.intsource = 20 
    AND vr.projcode = 50040 
    AND (vr.bokfdat BETWEEN CAST('2012-12-01' AS DATETIME) AND CAST('2012-12-31' AS DATETIME)) 
GROUP BY vr.ktonr, 
     vr.foretagkod, 
     vr.kostbar, 
     vr.koststallekod, 
     vr.projcode, 
     vr.redovisnar, 
     vr.period, 
     ko.ktobeskr, 
     vr.krebel 

更具體地講:這是SELECT子句中使用的情況下,內vr.krebel迫使我加太GROUP BY,如何避免這種情況?

+3

您需要在您的'CASE'中使用AND SUM(vr.krebel)> 0'或其他聚合函數 – hsan 2013-02-15 13:05:35

回答

4

這裏有不同的選項。但我認爲對您的查詢更好的是在GROUP BY中添加您的CASE

select vr.ktonr, 
     vr.foretagkod, 
     '' as persign, 
     '' as Type, 
     NULL, 
     1 as antal, 
     SUM(vr.debbel-vr.krebel), 
     0, 
     vr.kostbar, 
     vr.koststallekod, 
     vr.projcode, 
     vr.redovisnar, 
     vr.period, 
     'Allocated vouchers' as artbeskr, 
     ko.ktobeskr as kodescr, 
     case when ((vr.ktonr like '9600' or vr.ktonr like '3%') 
        AND (vr.krebel>0)) then 'Revenues' else 'Costs' end 
from vr 
inner join ko 
    on ko.ktonr=vr.ktonr 
    AND ko.redovisnar=datepart(year,vr.bokfdat) 
    AND ko.foretagkod=vr.foretagkod 
where vr.foretagkod = 300 
AND vr.intsource = 20 
AND vr.projcode = 50040 
AND (vr.bokfdat between CAST('2012-12-01' AS DATETIME) 
       AND CAST('2012-12-31' AS DATETIME)) 
group by vr.ktonr, 
     vr.foretagkod, 
     vr.kostbar, 
     vr.koststallekod, 
     vr.projcode, 
     vr.redovisnar, 
     vr.period, 
     ko.ktobeskr, 
     case when ((vr.ktonr like '9600' or vr.ktonr like '3%') 
        AND (vr.krebel>0)) then 'Revenues' else 'Costs' end