SELECT LIST sql 中的多个计数

Multiple COUNTS in SELECT LIST sql

我有一个包含多个连接的查询,如下所示:

SELECT branch,[language].Name,COUNT(r.ID) 'COUNTofStudent'
FROM Registration r
    INNER JOIN Branch
    ON r.fk_Branch=branch.ID
    INNER JOIN [Language]
    ON r.fk_Language=[Language].ID
GROUP BY branch,[language].Name
ORDER BY branch,[language].Name

那个 returns 我这个:

Branch  language  COUNT
a    English     234
a    German      321
a    Spanish     10
b    English     258
b    Spanish     159

。 . .

现在我想要这个:

Branch English  German Spanish
a    234      321    10
b    258      0      159

。 . .

如何使用查询执行此操作?

declare @t table (Branch varchar(100),LanguageName varchar(100),COUNTID INT)

insert into @t(Branch,LanguageName,COUNTID)values ('A','ENG',234)
insert into @t(Branch,LanguageName,COUNTID)values ('A','German',321)
insert into @t(Branch,LanguageName,COUNTID)values ('A','Spanish',10)
insert into @t(Branch,LanguageName,COUNTID)values ('B','ENG',258)
insert into @t(Branch,LanguageName,COUNTID)values ('B','Spanish',159)



;With pivot_data as
(
Select Branch,LanguageName,COUNTID
from @t
)
select Branch,ISNULL([ENG],0)As English, ISNULL([Spanish],0)As Spanish,ISNULL([German],0)As German
from   pivot_data
pivot  ( max(COUNTID) for LanguageName in ([ENG], [Spanish],[German]) ) as p;
--Conditional aggregation

;
WITH    CTE
          AS ( SELECT   branch ,
                        [language].Name ,
                        COUNT(r.ID) as [COUNTofStudent]
               FROM     Registration r
                        INNER JOIN Branch ON r.fk_Branch = branch.ID
                        INNER JOIN [Language] ON r.fk_Language = [Language].ID
               GROUP BY branch ,
                        [language].Name
               ORDER BY branch ,
                        [language].Name
             )
    SELECT  Branch ,
            SUM(CASE WHEN Name = 'English' THEN [COUNTofStudent]
                     ELSE 0
                END) AS English ,
            SUM(CASE WHEN Name = 'German' THEN [COUNTofStudent]
                     ELSE 0
                END) AS German ,
            SUM(CASE WHEN Name = 'Spanish' THEN [COUNTofStudent]
                     ELSE 0
                END) AS Spanish
    FROM    CTE
    GROUP BY CTE.Branch