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)
我已经建立了一个例子:
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尸体 | 德利托公司 ---------: | ----------: 42 | 61
dbfiddle在这里