2016-04-27 4 views
0

Таблица 'volcado': идентификатор, Reserva, cantidadСУММ() результаты GROUP 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 ║ 
╚══════╝ 

I нужен результат запроса: 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

ООК, я уже 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

Вы можете упростить запрос, если вам нравится. Таким образом, вместо того, чтобы использовать casehaving использования:

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