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
我有一个包含多个连接的查询,如下所示:
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