带和的IF或CASE语句

时间:2020-04-16 12:14:35

标签: sql sql-server case

那是我的桌子:

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

我对SQL Server中的if和case语句有一个简短的问题。

这是我的代码:

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

问题是,如果我在列中有特定值,则需要对求和运算符乘以该值。如果不是,我只需要我得到的结果即可。

我的第一次尝试是:

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 个答案:

答案 0 :(得分:2)

如果我的理解正确,您希望将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

答案 1 :(得分:2)

我假设't'公吨,并且您尝试通过将ton s转换为kgs来计算总和,因此应乘以1000Unit = 't'

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

这将以kg s的形式返回总和。
如果您希望在ton s内加和:

SELECT COALESCE(SUM(Value / CASE WHEN Unit = 'kg' THEN 1000.0 ELSE 1.0 END), 0) as Result
FROM test 
WHERE ID = 1