是否可以使用' case'和'计数'?

时间:2015-03-28 14:30:21

标签: sql sql-server sql-server-2008

是否可以在case中使用count

 SELECT branches.NAME AS agence, 
       count( 
       CASE loanstatus 
              WHEN '1' 
              AND    Datepart(month,loanaccount.issuedate)= 2 THEN 1 
              ELSE NULL 
       END )AS nombre_de_credits_demande , 
       count( 
       CASE loanstatus 
              WHEN '2' datepart(month,loanaccount.chargeoffdate)= 2 THEN 1 
              ELSE NULL 
       END )AS nombre_de_credits_approuve

请帮帮我

2 个答案:

答案 0 :(得分:1)

您可以将其与count()一起使用。我更喜欢sum()

select Branches.Name as Agence,
       sum(case when LoanStatus = '1' and
                     datepart(MONTH, LoanAccount.IssueDate) = 2
                then 1 else 0
           end ) as Nombre_de_Crédits_Demandé ,
       sum(case when LoanStatus = '2' and
                     datepart(MONTH, LoanAccount.IssueDate) = 2
                then 1 else 0
           end ) as Nombre_de_Crédits_Approuvé

您的代码问题不在于count()sum(),而是两种不同case语法的混合。使用case <var> when <val>时,不能包含任何其他条件。只需使用when即可满足您的所有条件。

而且,如果您愿意,可以使用count()代替sum()

而且,为了简明起见,我更喜欢month()函数:

select Branches.Name as Agence,
       sum(case when LoanStatus = '1' and MONTH(LoanAccount.IssueDate) = 2
                then 1 else 0
           end ) as Nombre_de_Crédits_Demandé ,
       sum(case when LoanStatus = '2' and MONTH(LoanAccount.IssueDate) = 2
                then 1 else 0
           end ) as Nombre_de_Crédits_Approuvé

答案 1 :(得分:0)

您可以通过此查询实现目标。

select
branches.name as agence
,(select COUNT(1) from <table_name> where loginstatus=1 and Datepart(month,loanaccount.issuedate)= 2) as nombre_de_credits_demande
,(select COUNT(1) from <table_name> where loginstatus=2 and Datepart(month,loanaccount.issuedate)= 2) as AS nombre_de_credits_approuve
from <Table_name>