SUM条件逻辑

时间:2015-05-11 21:40:55

标签: sql sql-server sql-server-2012

我在SQL Server 2012中有以下两个表:

|=================|  
|ID|SALARY|EXCLUDE|  
| 1| 90000|   NULL|  
| 1| 65000|   NULL|  
| 1| 10000|      Y|  
| 2| 85000|   NULL|  
| 2|  4500|      Y|  
| 2|  1000|      Y|  
| 3| 75000|   NULL|  
|=================|

|===========|  
|ID|CONTRACT|  
| 1|  155000|  
| 2|   85000|  
| 3|   75000|  
|===========|

我需要编写一个返回以下结果的查询:

|===========================|  
|ID|CONTRACT|EXCLUDED SALARY|  
| 1|  155000|          10000|  
| 2|   85000|           5500|  
| 3|   75000|           NULL|  
|===========================|

换句话说,如果EXCLUDE为Y,我需要在第一个表中为每个ID求和SALARY字段。我知道如何对salary列进行求和,但我不明白如何包含EXCLUDE逻辑。非常感谢您给予我的任何帮助!谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用条件聚合仅计算总和中排除标志为Y的工资:

sum(case when exclude = 'Y' then salary end)

答案 1 :(得分:1)

试试这个:

SELECT 
    A.ID, 
    B.CONTRACT, 
    SUM(CASE WHEN EXCLUDE = 'Y' then SALARY END) EXCLUDED_SALARY
FROM TABLE_SALARY A
INNER JOIN TABLE_CONTRACT B
   ON A.ID = B.ID
GROUP BY A.ID, B.CONTRACT