IF или CASE выписка с суммой - PullRequest
0 голосов
/ 16 апреля 2020

Вот моя таблица:

| ID | Value | Unit | 
|----|-------|------| 
| 1  | 5     | t    | 
| 1  | 700   | t    | 
| 1  | 612   | kg   |

У меня есть короткие вопросы по операторам if и case в SQL Server.

Это мой код:

(SELECT ISNULL(SUM(t.Value),0)
 FROM test t
 WHERE t.ID= "1") AS Result

Проблема в том, что если в столбце есть заданное значение c, мне нужно умножить это значение на оператор сумм. Если нет, мне нужен только результат, который я получу выше.

Моя первая попытка:

SELECT Result = CASE WHEN t.Unit= 'kg' THEN (IsNULL(SUM(t.Value),0) * 1000)
ELSE IsNULL(SUM(v.Verbrauch),0)
END
FRFROM test t
WHERE t.ID= "1"

Надеюсь, это прояснит проблему.

Любые идеи, как я могу сделай это?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Я предполагаю, что 't' для метри c тонна , и вы пытаетесь вычислить сумму путем преобразования ton s в kgs, поэтому вы должны умножить на 1000, когда Unit = 't':

SELECT COALESCE(SUM(Value * CASE WHEN Unit = 't' THEN 1000 ELSE 1 END), 0) as Result
FROM test 
WHERE ID = 1

Возвращает сумму в kg с. Если вы хотите сумму в ton с:

SELECT COALESCE(SUM(Value / CASE WHEN Unit = 'kg' THEN 1000.0 ELSE 1.0 END), 0) as Result
FROM test 
WHERE ID = 1
2 голосов
/ 17 апреля 2020

Если я правильно понимаю, вы хотите case в качестве аргумента для sum():

SELECT SUM(CASE WHEN t.Unit = 'kg' THEN 1000 * t.Value
                WHEN t.Unit = 't' THEN t.Value
           END) as 
FROM test t
WHERE t.ID = 1
...