2014-11-30 5 views
0

Query:Как использовать группу, в 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 

Это приводит, как показано ниже:

enter image description here

, но я хочу результат каждого юнита в одном ряду. может быть, у меня проблемы в моей группе.

Как мне реорганизовать мой запрос?

ответ

0

Если вы хотите обоих полов в одной строке, не следует группировать по полу.

Вместо этого вы должны сложить сколько мужчин и сколько женщины там использует сумму():

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 
0

Вы должны покинуть Пол столбец из пункта группировки:

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 
0
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 
0

Удалить Gender из Group by пункта

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 
Смежные вопросы