如何做 SUM() 但要遵循一些规则?

Rac*_*SQL 3 sql-server sql-server-2014

也许这个问题很难理解(因为我英语不流利)但是,我需要选择sum(cod)例如,但这sum()需要有以下规则:

第 1 部分:它必须是所有鳕鱼,除了21.

第 2 部分:另一列,有另一个sum(),但只有 cod 21。

这不是整个查询,但在此之后,我想我可以做到。

我试过这个:

select sum(vit_codigotiposexames) from 
    (
    select * from tb_vitima where vit_codigotiposexames  
        in (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22 )
    )Corpo_Delito,
sum(vit_codigotiposexames) from
    (
    select * from tb_vitima where vit_codigotiposexames  = 21 )
    )Cadaverico
Run Code Online (Sandbox Code Playgroud)

如果我只有

select sum(vit_codigotiposexames) from 
    (
    select * from tb_vitima where vit_codigotiposexames  
        in (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22 )
    )Corpo_Delito
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个查询,一个独特的查询?并且,有没有办法命名这些列?因为我知道我需要给它们取别名,但它们仍然保留在上面的那个(没有列名)。

McN*_*ets 14

我认为您可以使用 SUM(CASE) 语句来区分此 SUM:

select sum(case when vit_codigotiposexames = 21 
                then vit_codigotiposexames 
                else 0 end) Cadaverico,
       sum(case when vit_codigotiposexames <> 21 
                then vit_codigotiposexames 
                else 0 end) CorpoDelito
from   tb_vitima;
Run Code Online (Sandbox Code Playgroud)

我已经建立了一个例子:

create table tb_vitima (id int identity, vit_codigotiposexames int);
insert into tb_vitima values (2),(5),(10),(11),(21),(21),(10),(23);

select sum(case when vit_codigotiposexames = 21 then vit_codigotiposexames else 0 end) Cadaverico,
       sum(case when vit_codigotiposexames <> 21 then vit_codigotiposexames else 0 end) CorpoDelito
from   tb_vitima;
GO
Run Code Online (Sandbox Code Playgroud)
尸体 | 德利托公司
---------: | ----------:
        42 | 61

dbfiddle在这里