Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MSSQL表查询问题_Sql Server - Fatal编程技术网

Sql server MSSQL表查询问题

Sql server MSSQL表查询问题,sql-server,Sql Server,有人能告诉我在如下所示的两个表之间使用MSSQL获得正确数据结果的方法吗 **Person_Table** **Departemnt_Table** =========== ================ person_id depatment_id age department name gender dep

有人能告诉我在如下所示的两个表之间使用MSSQL获得正确数据结果的方法吗

**Person_Table**          **Departemnt_Table**
===========                 ================
person_id                   depatment_id
age                         department name 
gender                         
department_id
并且,我希望得到以下列的结果:

Department Names, 
Number under 20 aged Males in each department, 
number of under 20 aged Females in each department, 
total number of Males in each department, 
total number of Females in each department and, 
Total number of Persons in each department
示例结果应该如下所示

DepartmentName|(Under20)Male|(Under20)Female|Total(M)| Total(F)| Grand Total
Department1   |    1        |  3            |  1     |  3      |   4  
Department2   |    3        |  1            |  15    |  1      |   16
Department3   |    0        |  0            |  0     |  0      |   0

您需要使用GROUPBY子句和聚合函数

SELECT DT.DepartmentName,
        SUM(CASE WHEN PT.age < 20 AND PT.gender='MALE' THEN 1 ELSE 0 END) As [(Under20)Male]
       ,SUM(CASE WHEN PT.age < 20 AND PT.gender='FEMALE' THEN 1 ELSE 0 END) As [(Under20)FeMale],
       ,SUM(CASE WHEN PT.gender='MALE' THEN 1 ELSE 0 END) As [Total(M)]
       ,SUM(CASE WHEN PT.gender='FEMALE' THEN 1 ELSE 0 END) As [Total(F)]
       ,COUNT(*) As [Grand Total]   
FROM Departemnt_Table DT
INNER JOIN Person_Table PT ON DT.depatment_id = PT.depatment_id
GROUP BY DT.DepartmentName
选择DT.DepartmentName,
总和(当患者年龄<20岁且患者性别为“男性”时,则为1,否则为0)为[(20岁以下)男性]
,总和(当患者年龄<20岁且患者性别为女性时,则为1,否则为0结束)为[(20岁以下)女性],
,求和(当PT.gender='MALE'时为1,否则为0结束)为[总计(M)]
,求和(当PT.gender='femal'时为1,否则为0结束)为[总计(F)]
,计算(*)为[总计]
从部门表DT
DT.depatment\u id上的内部联接人员\u表PT=PT.depatment\u id
按部门名称分组

您需要使用带有聚合函数的GROUP By子句

SELECT DT.DepartmentName,
        SUM(CASE WHEN PT.age < 20 AND PT.gender='MALE' THEN 1 ELSE 0 END) As [(Under20)Male]
       ,SUM(CASE WHEN PT.age < 20 AND PT.gender='FEMALE' THEN 1 ELSE 0 END) As [(Under20)FeMale],
       ,SUM(CASE WHEN PT.gender='MALE' THEN 1 ELSE 0 END) As [Total(M)]
       ,SUM(CASE WHEN PT.gender='FEMALE' THEN 1 ELSE 0 END) As [Total(F)]
       ,COUNT(*) As [Grand Total]   
FROM Departemnt_Table DT
INNER JOIN Person_Table PT ON DT.depatment_id = PT.depatment_id
GROUP BY DT.DepartmentName
选择DT.DepartmentName,
总和(当患者年龄<20岁且患者性别为“男性”时,则为1,否则为0)为[(20岁以下)男性]
,总和(当患者年龄<20岁且患者性别为女性时,则为1,否则为0结束)为[(20岁以下)女性],
,求和(当PT.gender='MALE'时为1,否则为0结束)为[总计(M)]
,求和(当PT.gender='femal'时为1,否则为0结束)为[总计(F)]
,计算(*)为[总计]
从部门表DT
DT.depatment\u id上的内部联接人员\u表PT=PT.depatment\u id
按部门名称分组
声明@Person表(Person\u id int null,
年龄int null,
性别varchar(10)null,
部门(id INT null)
DECLARE@Department表(
部门id INT,部门名称Varchar(200))
插入@Department值(1,'A')中
在@Department值中插入(2,'B')
插入@Department值(3,'C')
在@Department值中插入(4,'D')
插入@Person值(1,19,'M',1)
插入@Person值(2,12,'F',1)
插入@Person值(3,30,'M',1)
插入@Person值(4,40,'F',1)
插入@Person值(5,20,'M',2)
插入@Person值(6,12,'F',2)
插入@Person值(7,30,'M',2)
插入@Person值(8,40,'F',2)
插入@Person值(9,20,'M',3)
插入@Person值(10,12,'F',3)
插入@Person值(11,30,'M',3)
插入@Person值(12,40,'F',3)
插入@Person值(13,20,'M',4)
插入@Person值(14,12,'F',4)
插入@Person值(15,30,'M',4)
插入@Person值(16,17,'F',4)
选择D.部门名称,
总和([(20岁以下)男性][(20岁以下)男性],
总和([(20岁以下)女性][(20岁以下)女性],
总额([总计(M)])[总计(M)],
总额([总额(F)])[总额(F)],
总和([总计])[总计]
从…起
(
从@Person中选择部门id,将(*)计数为[(20岁以下)男性]、0[(20岁以下)女性]、0[总数(M)]、0[总数(F)]、0[总计],其中年龄
声明@Person表(Person id int null),
年龄int null,
性别varchar(10)null,
部门(id INT null)
DECLARE@Department表(
部门id INT,部门名称Varchar(200))
插入@Department值(1,'A')中
在@Department值中插入(2,'B')
插入@Department值(3,'C')
在@Department值中插入(4,'D')
插入@Person值(1,19,'M',1)
插入@Person值(2,12,'F',1)
插入@Person值(3,30,'M',1)
插入@Person值(4,40,'F',1)
插入@Person值(5,20,'M',2)
插入@Person值(6,12,'F',2)
插入@Person值(7,30,'M',2)
插入@Person值(8,40,'F',2)
插入@Person值(9,20,'M',3)
插入@Person值(10,12,'F',3)
插入@Person值(11,30,'M',3)
插入@Person值(12,40,'F',3)
插入@Person值(13,20,'M',4)
插入@Person值(14,12,'F',4)
插入@Person值(15,30,'M',4)
插入@Person值(16,17,'F',4)
选择D.部门名称,
总和([(20岁以下)男性][(20岁以下)男性],
总和([(20岁以下)女性][(20岁以下)女性],
总额([总计(M)])[总计(M)],
总额([总额(F)])[总额(F)],
总和([总计])[总计]
从…起
(
选择部门id,将(*)计算为[(20岁以下)男性]、0[(20岁以下)女性]、0[总计(M)]、0[总计(F)]、0[总计]从@Person WHERE age