2016-04-27 70 views
0

表 'volcado':ID,釀,cantidadSUM()組的結果BY列

隨着以下查詢:

SELECT (CASE 
     WHEN sum(cantidad) > 0 THEN 1 
     WHEN sum(cantidad) <= 0 THEN 0 
     END) AS suma 
FROM volcado 
GROUP BY reserva 

結果是:

╔══════╗ 
║ suma ║ 
╠══════╣ 
║ 1 ║ 
║ 1 ║ 
║ 0 ║ 
║ 1 ║ 
║ 0 ║ 
╚══════╝ 

我需要查詢的結果是:3

我該如何SUM()在同一個查詢上的'suma'行?

我不明白這一點與運行:

SELECT SUM(SELECT (CASE 
     WHEN sum(cantidad) > 0 THEN 1 
     WHEN sum(cantidad) <= 0 THEN 0 
     END) AS suma FROM volcado GROUP BY reserva) 
FROM volcado 

錯誤:

提前

Subquery returns more than 1 row

感謝。

回答

2

嘗試這種方式

SELECT SUM(a.suma) from 
    (SELECT (CASE 
     WHEN sum(cantidad) > 0 THEN 1 
     WHEN sum(cantidad) <= 0 THEN 0 
     END) AS suma FROM volcado GROUP BY reserva)a 
1

這應該工作,使用子查詢作爲一個表而不是列。

SELECT SUM(suma) from 
    (SELECT (CASE 
     WHEN sum(cantidad) > 0 THEN 1 
     WHEN sum(cantidad) <= 0 THEN 0 
     END) AS suma FROM volcado GROUP BY reserva) 
+1

我想你已經加入從volcado一個無用的,刪除它 –

+0

OOK,我已經upvoted你的答案;) –

0

You can use CTE:

;WITH cte AS 
    (SELECT CASE 
       WHEN sum(cantidad) > 0 THEN 1 
       WHEN sum(cantidad) <= 0 THEN 0 
      END suma 
    FROM volcado 
    GROUP BY reserva) 
SELECT sum(suma) 
FROM cte 
0

可以簡化查詢,如果你喜歡。因此,而不是使用case使用having

SELECT COUNT(*) 
FROM (SELECT reserva 
     FROM volcado 
     GROUP BY reserva 
     HAVING SUM(cantidad) > 0 
    ) r;