2012-05-01 21 views
7

フィールドCase(一意の番号)、ISR(個別の安全性レポート - 一意の番号)およびYearsOldを含むレポートのテーブルがあります。DISTINCT COUNT in SELECT CASE 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

''ケース 'は異なる' ISR'のために異なる年の年齢を持つことができますか? – eggyal

+0

はい。 ISRは、有害な薬物反応に関する個人の安全性報告書です。特定の事件(2人以上の記者が提出したもの)に複数のISRが存在する可能性があります。また、同じ日付の違反事例に対して複数のISRが存在する可能性があります。理想的には、ケース+ DateOfEvent + YearsOldは、特定の年齢でケースに起こった有害事象の正確な数をカウントするために使用されますが、イベントの日付はレポートから省略されることが多いため、Case + YearsOldはユニークなCase + AdverseEventを数えます。あなたのソリューションは素晴らしい作品です。 –

答えて

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'を数えたいと思います。これは完全に行います。 –