如何使用 SQL 存储过程区分早晚班患者的性别

How can separate morning and evening shifts patients with gender wise using SQL stored procedure

我想按性别区分早上和晚上的病人登记人数,如果性别年龄小于则根据性别显示女童和男童。

SELECT 
    COUNT(ch.EnteredOn) AS counter, 
    CONVERT(date, ch.EnteredOn) AS sessionDay,
    SUM(CASE WHEN CAST(CONVERT(CHAR(2), ch.EnteredOn, 108) AS INT) < 12 THEN 1 ELSE 0 END) AS 'Morning',
    SUM(CASE WHEN CAST(CONVERT(CHAR(2), ch.EnteredOn, 108) AS INT) >= 12 THEN 1 ELSE 0 END) AS  'Evening',
    SUM(CASE WHEN p.Gender = 1 THEN 1 ELSE 0 END) AS Male,
    SUM(CASE WHEN p.Gender = 2 THEN 1 ELSE 0 END) AS Fmale,
    SUM(CASE WHEN DATEDIFF(hour, P.DOB, GETDATE()) / 8766 <= 18 
                  AND P.Gender = 1 THEN 1 ELSE 0 END) AS MChild,
    SUM(CASE WHEN DATEDIFF(hour, P.DOB, GETDATE()) / 8766 <= 18 
                  AND P.Gender = 2 THEN 1 ELSE 0 END) AS FChild
FROM 
    Patient.CheckIn ch
INNER JOIN
    Patient.Patients P ON ch.PatientId = p.PatientId
GROUP BY
    Ch.EnteredOn

我只有 GenderTimeDOB 三列。 Gender id 1 表示男性,Gender id 2 表示女性。

enter image description here

SELECT convert(date, ch.EnteredOn) AS sessionDay, CAST( CONVERT(CHAR(2), ch.EnteredOn, 108) AS INT) <12 as morning, count(ch.EnteredOn) AS counter
,sum(case when p.Gender=1 Then 1 ELSE 0 end) as Male
,sum(case when p.Gender=2 Then 1 ELSE 0 end) as Fmale
,Sum( case when DATEDIFF(hour,P.DOB,GETDATE())/8766<=18 AND P.Gender=1 Then 1 ELSE 0 end ) as MChiled
,Sum( case when DATEDIFF(hour,P.DOB,GETDATE())/8766<=18 AND P.Gender=2 Then 1 ELSE 0 end ) as FChiled
FROM Patient.CheckIn ch
inner join Patient.Patients P on ch.PatientId=p.PatientId 
Group by Ch.EnteredOn

Group BY可以

Group by convert(date, ch.EnteredOn) AS sessionDay, CAST( CONVERT(CHAR(2), ch.EnteredOn, 108) AS INT) <12