我正在计算第1天和第2天之间疼痛的变化。 有两个字段,Pain_Admit_Comfort和Pain_48_Hr_Comfort,每个字段中的选项是Yes / No。
我需要找到承认痛苦的每个人,并在2天后更舒服。
这是查询。前两个语句返回正确的数字。我无法弄清楚如何使用与分子和分母相同的陈述来划分。
select
(select COUNT (PAIN_48_HR_COMFORT_C)
FROM CASES WHERE PAIN_48_HR_COMFORT_C='Yes') as Forty_Eight_Hours,
(SELECT COUNT (PAIN_ADMIT_COMFORT_C)
FROM CASES WHERE PAIN_ADMIT_COMFORT_C='YES') as Admit_Uncomfort_Yes,
((select COUNT (PAIN_48_HR_COMFORT_C)
FROM CASES WHERE PAIN_48_HR_COMFORT_C='Yes')
/
(SELECT COUNT (PAIN_ADMIT_COMFORT_C)
FROM CASES WHERE PAIN_ADMIT_COMFORT_C='YES')) AS Percent_Changed
from CASES
谢谢
答案 0 :(得分:3)
我没有发现你的陈述有任何直接问题,但是以下陈述应该返回正确的结果,并且可能更容易阅读。
SELECT feh.Forty_Eight_Hours
, auy.Admit_Uncomfort_Yes
, Percent_Changed = CAST(feh.Forty_Eight_Hours AS FLOAT) / auy.Admit_Uncomfort_Yes
FROM (
SELECT Forty_Eight_Hours = COUNT(PAIN_48_HR_COMFORT_C)
FROM CASES
WHERE PAIN_48_HR_COMFORT_C = 'Yes'
) feh
CROSS APPLY (
SELECT Admit_Uncomfort_Yes = COUNT (PAIN_ADMIT_COMFORT_C)
FROM CASES
WHERE PAIN_ADMIT_COMFORT_C = 'Yes'
) auy
答案 1 :(得分:0)
您的查询和其他答案效率非常低(多次选择)。
您想要的是一个“枢轴”,并且使用一个选择表格(您的查询使用4)的最有效的编码方式如下:
select
sum(case when PAIN_48_HR_COMFORT_C = 'Yes' then 1 else 0 end) as Forty_Eight_Hours,
sum(case when PAIN_ADMIT_COMFORT_C = 'Yes' then 1 else 0 end) as Admit_Uncomfort_Yes
sum(case when PAIN_ADMIT_COMFORT_C = 'Yes' AND PAIN_48_HR_COMFORT_C = 'NO' then 1 else 0 end) as Improved_pain
FROM CASES
我不确定列是什么意思 - 你可能需要将'YES'更改为'NO'等以使“has”/“has not”痛苦正确。