1

这是我的查询:

SELECT  DISTINCT
        Patient_Ref_master.Dept_ID AS 'Dept_ID' ,
        ( SELECT DISTINCT
                    COUNT(Patient_Ref_master.Sr_No)
          FROM      Patient_Ref_master
                    LEFT JOIN Patient_Master ON Patient_Master.Pat_Code = Patient_Ref_master.Pat_ID
          WHERE     Patient_Ref_master.creation_Date = '2013/08/02'
                    AND Patient_Master.Age >= 0
                    AND Patient_Master.Age <= 16
                    AND Patient_Master.Pat_Sex = 1
        ) AS 'Boys' ,
        ( SELECT DISTINCT
                    COUNT(Patient_Ref_master.Sr_No)
          FROM      Patient_Ref_master
                    LEFT JOIN Patient_Master ON Patient_Master.Pat_Code = Patient_Ref_master.Pat_ID
          WHERE     Patient_Ref_master.creation_Date = '2013/08/02'
                    AND Patient_Master.Age >= 0
                    AND Patient_Master.Age <= 16
                    AND Patient_Master.Pat_Sex = 2
        ) AS 'Girls' ,
        ( SELECT DISTINCT
                    COUNT(Patient_Ref_master.Sr_No)
          FROM      Patient_Ref_master
                    LEFT JOIN Patient_Master ON Patient_Master.Pat_Code = Patient_Ref_master.Pat_ID
          WHERE     Patient_Ref_master.creation_Date = '2013/08/02'
                    AND Patient_Master.Age > 16
                    AND Patient_Master.Pat_Sex = 2
        ) AS 'Females' ,
        ( SELECT DISTINCT
                    COUNT(Patient_Ref_master.Sr_No)
          FROM      Patient_Ref_master
                    LEFT JOIN Patient_Master ON Patient_Master.Pat_Code = Patient_Ref_master.Pat_ID
          WHERE     Patient_Ref_master.creation_Date = '2013/08/02'
                    AND Patient_Master.Age > 16
                    AND Patient_Master.Pat_Sex = 1
        ) AS 'Males'
FROM    Patient_Ref_master
        LEFT JOIN Patient_Master ON Patient_Master.Pat_Code = Patient_Ref_master.Pat_ID
        LEFT JOIN Gender_master ON Gender_master.Code = Patient_Master.Pat_Sex
        LEFT JOIN Dept_Master ON Dept_Master.Dept_code = Patient_Ref_master.Dept_ID
WHERE   Patient_Ref_master.creation_Date = '2013/08/02'
GROUP BY Patient_Master.Pat_Sex ,
        Patient_Ref_master.Dept_ID

在这里,我试图根据被选为第一列的部门明智来计算男孩、女孩、男性和女性的数量。但我得到的结果是

Dept_ID Boys    Girls   Females Males
102     3       0       11      6
103     3       0       11      6
104     3       0       11      6

我的患者总数是 20,这反映在每一行中。如何按部门完美统计男孩,女孩,男性和女性

Patient_ref_master

Sr_No   int
Receipt_no  varchar(50)
old_new int
Pat_catagory    int
Fees    decimal(10, 2)
Pat_ID  int
Doc_ID  int
Dept_ID int
Age_Catagory    int
Age decimal(10, 7)
creation_Date   datetime
created_By  int
Qty decimal(5, 2)
Actual_Amnt decimal(7, 4)
Receipt_type    int
Receipt_total_Price decimal(7, 4)
Receipt_suggestion_Type int
Receipt_actual_suggestion   int

病人师傅

Pat_Code    int
Pat_FName   varchar(30)
Pat_MName   varchar(30)
Pat_SName   varchar(30)
Pat_Sex varchar(10)
Pat_Addr    varchar(100)
Pat_Mob_No  varchar(13)
age int
creation_Date   datetime
created_By  int
4

1 回答 1

2

虽然没有数据样本我没有信心,但请尝试以下:

;with cte as (
    SELECT prm.Dept_ID, p.[Group], prm.Sr_No
    FROM Patient_Ref_master prm
        JOIN Patient_Master pm ON pm.Pat_Code = prm.Pat_ID
        CROSS APPLY (
            select
                case
                    when pm.Age between 0 and 16 and pm.Pat_Sex = 1 then 'Boys'
                    when pm.Age between 0 and 16 and pm.Pat_Sex = 2 then 'Girls'
                    when pm.Age > 16 and pm.Pat_Sex = 2 then 'Females'
                    when pm.Age > 16 and pm.Pat_Sex = 1 then 'Males'
                end as [Group]
        ) p
    WHERE prm.creation_Date = '2013/08/02'
)
select Dept_ID, [Boys], [Girls], [Females], [Males]
from cte
    pivot (count(Sr_No) for [Group] in ([Boys],[Girls],[Females],[Males])) p

我删除left joinGender_masterand Dept_Master,因为我看不到它们的用途。我也将 join 从and更改left为 inner between 。Patient_Ref_masterPatient_Master

于 2013-08-05T19:47:11.800 回答