2012-05-01 142 views
7

我有一個包含字段Case(唯一編號),ISR(個人安全報告 - 唯一編號)和YearsOld的報告表。SELECT CASE中的DISTINCT COUNT SQL

可以有每個案例不止一個ISR。我想要計算年齡組內獨特病例的數量。

此SQL給我的ISR的數量的計數:

SELECT 
COUNT(CASE WHEN `YearsOld` = -2) THEN 1 END) `No Report`, 
COUNT(CASE WHEN `YearsOld` BETWEEN 0 AND 5) THEN 1 END) `0 to 5` 
COUNT(CASE WHEN `YearsOld` BETWEEN 6 AND 12) THEN 1 END) `6 to 12` 
FROM `Demographics` 

有沒有修改這個來算,這些年齡組DISTINCT Cases的方法嗎?

+0

總是有可能的,但如果一個病例跨越5-6歲的人。你想計數是在該情況下開始的範圍內,或如該人通過最近的活動相關的情況。 – DRapp

+0

可以在'Case'有不同的'YearsOld'年齡不同的'ISR'? – eggyal

+0

是的。 ISR是關於藥物不良反應的個人安全報告。有可能是在一個特定的事件(提交由兩個以上的記者)以上的ISR,並有可能對所發生給他/她在不同的日期不良事件相同案例不止一個ISR。理想情況下,案例+ DateOfEvent + YearsOld將被用來計算所發生的情況下,在一個給定的年齡不良事件的確切數字,但事件的日期往往是從報告中省略了,所以案例+ YearsOld是接近我可以得到統計獨特的Case + AdverseEvents。下面的解決方案效果很好。 –

回答

8

如果您的「案例」變是唯一的,你當然可以把不同的關鍵字直接在SQL CASE語法:

Count(distinct CASE when yearsold between 6 and 12 then case else null end) 

這樣的情況下,變量的每個唯一值只計算一次。

在列命名剛一說明,我不會用一個詞已經在SQL這意味着,如果你有一個選擇(而不是情況下,即使用「case_num」)建議。

+0

謝謝,我同意你的說明; 'Case'是現有表格中的字段名稱。 –

4

你可以使用子查詢過濾受衆特徵表每箱單YearsOld場,但如果這種情況下,可能已涉及到年齡差異爲不同ISR它只會落得一個支架被計算(也許這是你想要什麼)?

SELECT 
    ... -- as you currently have 
FROM (
    SELECT `Case`, `YearsOld` from `Demographics` GROUP BY `Case` 
) t; 

或者,要「算」每個支架內的每個「不同」,「案例」,你從字面上說:

SELECT 
    COUNT(DISTINCT CASE WHEN `YearsOld` = -2 THEN 1 END) `No Report`, 
    COUNT(DISTINCT CASE WHEN `YearsOld` BETWEEN 0 AND 5 THEN `Case` END) `0 to 5`, 
    COUNT(DISTINCT CASE WHEN `YearsOld` BETWEEN 6 AND 12 THEN `Case` END) `6 to 12` 
FROM Demographics; 
+0

謝謝,這個工程。我想要計算DISTINCT'Case' +'YearsOld',這是完美的。 –