如何使用SQL case语句获取和值

如何使用SQL case语句获取和值,sql,sql-server,Sql,Sql Server,我使用这里显示的查询来计算财务目标第一对账单(expd)的总和,它显示的是socode不等于29和42的总和。但是 第二条语句我只想求和,其中socode=42和29和20,但它的值为0.00,而29和42有自己的值 select isnull(CONVERT(DECIMAL(10, 2), SUM(CASE WHEN SoCode <> 42 and SoCode <> 29 and SoCode <> 20

我使用这里显示的查询来计算财务目标第一对账单(expd)的总和,它显示的是
socode
不等于29和42的总和。但是 第二条语句我只想求和,其中
socode=42
和29和20,但它的值为0.00,而29和42有自己的值

select 
   isnull(CONVERT(DECIMAL(10, 2),
           SUM(CASE WHEN SoCode <> 42 and SoCode <> 29 and SoCode <> 20 
                       THEN (Financialtarget)/100000 ELSE 0 END)), 0) as expd,
   isnull(CONVERT(DECIMAL(10, 2),
           SUM(CASE WHEN (SoCode = 29) and (SoCode = 42)  
                      THEN (Financialtarget)/100000 ELSE 0 END)), 0) as expd1
from 
    MPR 
where 
    month <= 7 
    and mpryear = '2014-15' 
    and Division = '12' 
选择
isnull(转换为十进制(10,2),
总和(SoCode 42、SoCode 29和SoCode 20时的情况
然后(Financialtarget)/100000 ELSE 0 END),0)作为扩展,
isnull(转换为十进制(10,2),
总和(当(SoCode=29)和(SoCode=42)时的情况)
然后(Financialtarget)/100000 ELSE 0 END),0)作为expd1
从…起
MPR
哪里

expd1
为0,因为条件
(SoCode=29)和(SoCode=42)
总是错误的。它应该使用
或类似
(SoCode=29)或(SoCode=42)或(SoCode=20)的
而不是使用

SELECT 
    ISNULL(CONVERT(DECIMAL(10,2),
    SUM(CASE WHEN SoCode <> 42 AND SoCode <> 29 AND SoCode <> 20 
        THEN (Financialtarget)/100000 
        ELSE 0 END)),0) AS expd, 
    ISNULL(CONVERT(DECIMAL(10,2),
        SUM(CASE WHEN (SoCode = 29) OR (SoCode = 42) OR (SOCode = 20) 
        THEN (Financialtarget)/100000 
        ELSE 0 END)),0) AS expd1
FROM MPR 
WHERE month <= 7 AND mpryear = '2014-15' AND Division = '12' 

expd1
为0,因为条件
(SoCode=29)和(SoCode=42)
总是错误的。它应该使用
或类似
(SoCode=29)或(SoCode=42)或(SoCode=20)的
而不是使用

SELECT 
    ISNULL(CONVERT(DECIMAL(10,2),
    SUM(CASE WHEN SoCode <> 42 AND SoCode <> 29 AND SoCode <> 20 
        THEN (Financialtarget)/100000 
        ELSE 0 END)),0) AS expd, 
    ISNULL(CONVERT(DECIMAL(10,2),
        SUM(CASE WHEN (SoCode = 29) OR (SoCode = 42) OR (SOCode = 20) 
        THEN (Financialtarget)/100000 
        ELSE 0 END)),0) AS expd1
FROM MPR 
WHERE month <= 7 AND mpryear = '2014-15' AND Division = '12' 

expd1
为0,因为条件
(SoCode=29)和(SoCode=42)
总是错误的。它应该使用
或类似
(SoCode=29)或(SoCode=42)或(SoCode=20)的
而不是使用

SELECT 
    ISNULL(CONVERT(DECIMAL(10,2),
    SUM(CASE WHEN SoCode <> 42 AND SoCode <> 29 AND SoCode <> 20 
        THEN (Financialtarget)/100000 
        ELSE 0 END)),0) AS expd, 
    ISNULL(CONVERT(DECIMAL(10,2),
        SUM(CASE WHEN (SoCode = 29) OR (SoCode = 42) OR (SOCode = 20) 
        THEN (Financialtarget)/100000 
        ELSE 0 END)),0) AS expd1
FROM MPR 
WHERE month <= 7 AND mpryear = '2014-15' AND Division = '12' 

expd1
为0,因为条件
(SoCode=29)和(SoCode=42)
总是错误的。它应该使用
或类似
(SoCode=29)或(SoCode=42)或(SoCode=20)的
而不是使用

SELECT 
    ISNULL(CONVERT(DECIMAL(10,2),
    SUM(CASE WHEN SoCode <> 42 AND SoCode <> 29 AND SoCode <> 20 
        THEN (Financialtarget)/100000 
        ELSE 0 END)),0) AS expd, 
    ISNULL(CONVERT(DECIMAL(10,2),
        SUM(CASE WHEN (SoCode = 29) OR (SoCode = 42) OR (SOCode = 20) 
        THEN (Financialtarget)/100000 
        ELSE 0 END)),0) AS expd1
FROM MPR 
WHERE month <= 7 AND mpryear = '2014-15' AND Division = '12' 

请格式化代码。请格式化代码。请格式化代码。请格式化代码。请格式化代码。不客气,如果我的答案能解决你的问题,请接受。更多详情请参见此处:不客气,如果我的回答能解决您的问题,请接受。更多详情请参见此处:不客气,如果我的回答能解决您的问题,请接受。更多详情请参见此处:不客气,如果我的回答能解决您的问题,请接受。有关更多详细信息,请参见此处: