那是我的桌子:
| 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"
我希望这可以使问题清楚。
有什么想法可以做到这一点吗?
答案 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
来计算总和,因此应乘以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
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