Случай SQL с суммой и нормальным значением - PullRequest
0 голосов
/ 01 февраля 2019

Ниже мой SQL-запрос

select                
 case when x < 2 then  a 
 when x = 0 then Max(a) end a
 ,case when x < 2 then  b
 when x = 0 then  Sum(b) end b
from T

Как мы можем это сделать?Я использую сейчас Союз, чтобы получить требуемый результат.Ищите лучший способ сделать это.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы можете использовать CASE, когда условия внутри агрегатных функций.

т.е.

SELECT SUM(CASE WHEN x < 2 THEN a WHEN x = 0 THEN @maxA END) AS sum_a
0 голосов
/ 01 февраля 2019

Вы можете получить эти агрегированные значения в переменную и использовать ее.

DECLARE @maxA int;
DECLARE @sumB int;

SELECT @maxA = max(a),@sumB = sum(b) FROM t;

SELECT CASE
           WHEN x < 2 THEN a
           WHEN x = 0 THEN @maxA
       END a ,
       CASE
           WHEN x < 2 THEN b
           WHEN x = 0 THEN @sumB
       END b
FROM T
...