繁体   English   中英

如何在SQL Server中使用分组依据

[英]How to use group by in SQL Server

查询:

SELECT 
   dbo.tblDivision.DivisionName, dbo.tblDistrict.DistrictName,
   case 
      when Gender = 'Male' 
         then count(Gender)
   end as male,
   case 
      when Gender = 'female'
        then count(Gender)
   end as female,
   UnitEName
FROM 
   dbo.tblDistrict 
INNER JOIN
   dbo.tblThana ON dbo.tblDistrict.DistrictNo = dbo.tblThana.DistrictNo 
INNER JOIN
   dbo.tblDivision ON dbo.tblDistrict.DivisionNo = dbo.tblDivision.DivisionNo 
INNER JOIN
   dbo.vw_EmpInfo ON dbo.tblThana.ThanaNo = dbo.vw_EmpInfo.PerThanaNo 
GROUP BY
   Gender, DistrictName, DivisionName, UnitEName, UnitEAddress 
ORDER BY 
   DivisionName, DistrictName, UnitEName

结果如下:

在此处输入图片说明

但是我希望每个单元的结果都在一行中。 可能是我所在的小组有问题。

我应该如何重构查询?

您必须将“性别”列从分组子句中删除:

SELECT dbo.tblDivision.DivisionName, dbo.tblDistrict.DistrictName,
       COUNT(CASE Gender WHEN 'Male' THEN 1 END) AS male,
       COUNT(CASE Gender WHEN 'female' THEN 1 END) AS female,
       UnitEName
FROM dbo.tblDistrict 
INNER JOIN dbo.tblThana ON dbo.tblDistrict.DistrictNo = dbo.tblThana.DistrictNo 
INNER JOIN dbo.tblDivision ON dbo.tblDistrict.DivisionNo = dbo.tblDivision.DivisionNo 
INNER JOIN dbo.vw_EmpInfo ON dbo.tblThana.ThanaNo = dbo.vw_EmpInfo.PerThanaNo 
GROUP BY DistrictName,DivisionName,UnitEName,UnitEAddress 
ORDER BY DivisionName,DistrictName,UnitEName

如果您想将两个性别都排成一排,则不应按性别分组。

相反,您应该使用sum()累加多少个男性和几个女性:

SELECT dbo.tblDivision.DivisionName, dbo.tblDistrict.DistrictName,
  SUM(case when Gender='Male' then 1 else 0 end) as male,
  SUM(case when Gender='Female' then 1 else 0 end) as female,
  UnitEName
FROM dbo.tblDistrict INNER JOIN
  dbo.tblThana ON dbo.tblDistrict.DistrictNo = dbo.tblThana.DistrictNo INNER JOIN
  dbo.tblDivision ON dbo.tblDistrict.DivisionNo = dbo.tblDivision.DivisionNo INNER JOIN
  dbo.vw_EmpInfo ON dbo.tblThana.ThanaNo = dbo.vw_EmpInfo.PerThanaNo 
group by DistrictName,DivisionName,UnitEName,UnitEAddress 
order by DivisionName,DistrictName,UnitEName
SELECT dbo.tblDivision.DivisionName
     , dbo.tblDistrict.DistrictName
     ,COUNT(case when Gender='Male' then 1 end) as male
     ,COUNT(case when Gender='female' then 1 end) as female
     ,UnitEName
FROM dbo.tblDistrict 
INNER JOIN dbo.tblThana ON dbo.tblDistrict.DistrictNo = dbo.tblThana.DistrictNo 
INNER JOIN dbo.tblDivision ON dbo.tblDistrict.DivisionNo = dbo.tblDivision.DivisionNo 
INNER JOIN dbo.vw_EmpInfo ON dbo.tblThana.ThanaNo = dbo.vw_EmpInfo.PerThanaNo 
GROUP BY DivisionName
        ,DistrictName
        ,UnitEName

从“ Group by子句中删除“ Gender

SELECT dbo.tblDivision.DivisionName, dbo.tblDistrict.DistrictName,
sum (case when Gender='Male' then 1 else 0 end) as male
sum (case when Gender='female' then 1 else 0 end)  as female,
       UnitEName
FROM dbo.tblDistrict 
INNER JOIN dbo.tblThana ON dbo.tblDistrict.DistrictNo = dbo.tblThana.DistrictNo 
INNER JOIN dbo.tblDivision ON dbo.tblDistrict.DivisionNo = dbo.tblDivision.DivisionNo 
INNER JOIN dbo.vw_EmpInfo ON dbo.tblThana.ThanaNo = dbo.vw_EmpInfo.PerThanaNo 
GROUP BY DistrictName,DivisionName,UnitEName,UnitEAddress 
ORDER BY DivisionName,DistrictName,UnitEName

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM