我确定我之前已经完成了1000次此类操作,但出于某种原因,这对我不起作用。我正在做一份报告,以确定患者是否在一天内接受药物治疗。因此,无论他们在一天中获得1次或5次剂量,该值应为1.工作人员也会对系统进行校正,这些校正为负值。因此,我需要将每天的所有剂量值相加,如果它是+值则为1,否则为0。
此时我想要完成的是每个日期有1行为1或0。
这是我的SQL查询,用于对值进行求和:
SELECT
DIM_DRUG_NAME_SHORT.Drug_Name_Short AS 'Med_Name_Short'
, SUM(Baseline.Doses) as 'DOT'
, Day(Baseline.Dispense_Date) as 'd_Date'
FROM
FACT_AMS_Baseline_Report Baseline
INNER JOIN DIM_DRUG_NAME_SHORT ON Baseline.Med_Name_ID = DIM_DRUG_NAME_SHORT.Drug_Name_Long
INNER JOIN DIM_Date tDate ON Baseline.Dispense_Date = tDate.Date
WHERE
Baseline.Encounter = '00000001/01'
GROUP BY
DIM_DRUG_NAME_SHORT.Drug_Name_Short
, Baseline.Dispense_Date
, Doses
Order By
Drug_Name_Short
暂时我只是将一次遭遇从数据集中拉出来进行测试。 这是我得到的输出。我还在选择中包括了Day,以表明同一天来了两次而且他们没有得到Summed。
以下是我得到的输出示例:
Med_Name_Short DOT day of month
CEFTRIAXONE 1 15
CEFTRIAXONE 1 16
CEFTRIAXONE 4 16
CEFTRIAXONE 1 17
CEFTRIAXONE 1 18
CEFTRIAXONE 1 20
CEFTRIAXONE -3 21
CEFTRIAXONE 1 21
CEFTRIAXONE -1 23
PROPRANOLOL -1 24
PROPRANOLOL 3 24
PROPRANOLOL 1 25
PROPRANOLOL 2 26
PROPRANOLOL 2 27
我希望在此看到的是第16天是5,第21天是-2,第24天是-2。
非常感谢任何帮助。 感谢
答案 0 :(得分:2)
从“分组依据”列表中删除剂量。您正在使用它的聚合函数(SUM)是正确的,因此它不应该在GROUP BY中。
答案 1 :(得分:1)
我认为你不应该按剂量进行分组。如果没有看到您的数据,我只能猜测,例如,16日有2个剂量的数量2。
所以试试:
SELECT
DIM_DRUG_NAME_SHORT.Drug_Name_Short AS 'Med_Name_Short'
, SUM(Baseline.Doses) as 'DOT'
, Day(Baseline.Dispense_Date) as 'd_Date'
FROM
FACT_AMS_Baseline_Report Baseline
INNER JOIN DIM_DRUG_NAME_SHORT ON Baseline.Med_Name_ID = DIM_DRUG_NAME_SHORT.Drug_Name_Long
INNER JOIN DIM_Date tDate ON Baseline.Dispense_Date = tDate.Date
WHERE
Baseline.Encounter = '00000001/01'
GROUP BY
DIM_DRUG_NAME_SHORT.Drug_Name_Short
, Baseline.Dispense_Date
Order By
Drug_Name_Short
答案 2 :(得分:0)
由于您在剂量上进行聚合,您应该将其从组中移除,并且要获得剂量1或0,请使用案例表达式:
SELECT
DIM_DRUG_NAME_SHORT.Drug_Name_Short AS 'Med_Name_Short'
, CASE WHEN SUM(Baseline.Doses) >= 1 THEN 1 ELSE 0 END AS 'DOT'
, Day(Baseline.Dispense_Date) as 'd_Date'
FROM
FACT_AMS_Baseline_Report Baseline
INNER JOIN DIM_DRUG_NAME_SHORT ON Baseline.Med_Name_ID = DIM_DRUG_NAME_SHORT.Drug_Name_Long
INNER JOIN DIM_Date tDate ON Baseline.Dispense_Date = tDate.Date
WHERE
Baseline.Encounter = '00000001/01'
GROUP BY
DIM_DRUG_NAME_SHORT.Drug_Name_Short
, Baseline.Dispense_Date
Order By
Drug_Name_Short
如果allocatese_date是日期时间值,您应该在组中使用Day(Baseline.Dispense_Date)或删除时间部分。 如果您按天分组并且您的数据超过一个月,您应该限制范围或包括年和月,以便不同月份/年的数据不会被总结。
使用您的示例数据,您应该得到如下结果:
Med_Name_Short DOT day of month
CEFTRIAXONE 1 15
CEFTRIAXONE 1 16
CEFTRIAXONE 1 17
CEFTRIAXONE 1 18
CEFTRIAXONE 1 20
CEFTRIAXONE 0 21
CEFTRIAXONE 0 23
PROPRANOLOL 1 24
PROPRANOLOL 1 25
PROPRANOLOL 1 26
PROPRANOLOL 1 27