Sam*_*Ham 2 sql sql-server sql-server-2008
如何在不GROUP BY使用CASE表达式的情况下获得值的总和SQL
(或请提出实现此目标的其他最佳方法)
查询:
SELECT
CASE
WHEN [lab_date] <= '2018-03-24'
AND [lab_date] >= '2018-01-01'
THEN(ISNULL(SUM(ISNULL([cost], 0) * 5 / 100), 0))
WHEN [lab_date] >= '2018-03-25'
THEN(ISNULL((SUM(ISNULL([cost], 0))) - (SUM(ISNULL([cost], 0) * 5 / 100)), 0))
END AS [tax]
FROM [LABOR];
+-------------+--------+
| lab_date | cost |
+-------------+--------+
| 2018-03-12 | 75.00 |
| 2018-03-01 | 150.00 |
| 2018-03-11 | 450.00 |
| 2018-03-13 | 37.50 |
| 2018-03-15 | 150.00 |
+-------------+--------+
Run Code Online (Sandbox Code Playgroud)
在lab_date之前与GROUP取得联系
+-------+
| tax |
+-------+
| 15.00 |
| 22.50 |
| 3.75 |
| 1.88 |
+-------+
Run Code Online (Sandbox Code Playgroud)
我们如何获得如下结果
+-------+
| tax |
+-------+
| 43.13 |
+-------+
Run Code Online (Sandbox Code Playgroud)
我认为您需要条件聚合。。。其中的case参数是SUM():
SELECT SUM(CASE WHEN lab_date <= '2018-03-24' AND lab_date >= '2018-01-01' THEN cost * 5.0/100
WHEN lab_date >= '2018-03-25' THEN cost - cost * 5.0/100
ELSE 0
END) as tax
FROM LABOR ;
Run Code Online (Sandbox Code Playgroud)
请注意,SQL Server执行整数除法。因此,我建议您不要写5/100,因为这将等于0。即使先执行乘法,也不习惯保留小数点。
| 归档时间: |
|
| 查看次数: |
367 次 |
| 最近记录: |