2017-07-16 4 views
0

私は、「プロシージャ」、「観察」、または「プロシージャ」のために医者の診察を受けた患者の数に基づいてカウントを得るselect文を持っています。ストアドプロシージャに含まれる '条件'。私はオプションのパラメータとして 'プロシージャ'、 '観測'、 '条件'を使用しています。 'procedure'、 'condition'、 'observation'はすべて別々のテーブルに格納されています。目的は、ある期間内に「手順」、「観察」または「状態」を有する患者数に対する「分子」値を計算することである。Where句はCount()の特定の行ではなく、すべての行を返します

同じ患者が複数の「手順」、複数の「観察」または複数の「条件」を持つように見える場合、「カウント」はそれらのすべてを導き出し、特定の「分子」値ストアドプロシージャ。

Parameter declarations: 
@CareSite VARCHAR(1000),  /* where visit occurs */ 
@AgeStart VARCHAR(10),   /* starting age patient's age falls in */ 
@AgeEnd VARCHAR(10),   /* ending age patient's age falls in */ 
@Gender VARCHAR(10),   /* 'men' or 'women' 
@Procedure_Numerator VARCHAR(1000)=null, /* procedure the visit is for */ 
@Condition_Numerator VARCHAR(1000)=null, /* condition the visit is for */ 
@Observation_Numerator VARCHAR(1000)=null /* observation the visit is for */ 

SELECT statement: 

DECLARE @D1NumVal INT 
    SET @D1NumVal = (SELECT COUNT(*) AS Numerator 
         FROM SAS2SQL_DenominatorPersonTest DPT 
         JOIN SAS2SQL_DenominatorProcedureTest DPRT 
         ON DPRT.PersonID = DPT.PersonID 
         JOIN SAS2SQL_DenominatorConditionTest DCT 
         ON DCT.Person_ID = DPT.PersonID 
         JOIN SAS2SQL_DenominatorObservationsTest DOT 
         ON DOT.PersonID = DPT.PersonID 
         WHERE DPT.D1 = 1 
         AND DPT.Age >= @AgeStart AND DPT.Age <= @AgeEnd 
         AND (@Procedure_Numerator IS NOT NULL AND 
          DPT.CareSiteName = @CareSite AND DPT.Wave = 
          @Wave 
          AND DPT.Gender = @Gender AND 
          DPRT.ProcudureSourceValue = 
          @Procedure_Numerator) 
         OR (@Condition_Numerator IS NOT NULL AND 
          DPT.CareSiteName = @CareSite AND DPT.Wave =  
          @Wave 
         AND DPT.Gender = @Gender AND 
          DCT.X_Condition_Source_Desc = 
          @Condition_Numerator) 
          OR (@Observation_Numerator IS NOT NULL AND 
          DPT.CareSiteName = @CareSite AND DPT.Wave = 
          @Wave 
          AND DPT.Gender = @Gender AND 
          DOT.ObservationSourceValue = 
          @Observation_Numerator)) 

私は「CASE WHENに」アプローチを使用してみましたが、私は上記の持っていることは、私は生成しようとしているものに近い結果を返しました。

答えて

0

ANDORの前に評価され、2番目のANDの後に評価され、最後のものが評価されるため、おそらくかっこを追加する必要があります。

これはあなたの説明と一致しているようだ:

DECLARE @D1NumVal INT 
    SET @D1NumVal = (SELECT COUNT(*) AS Numerator 
         FROM SAS2SQL_DenominatorPersonTest DPT 
         JOIN SAS2SQL_DenominatorProcedureTest DPRT 
         ON DPRT.PersonID = DPT.PersonID 
         JOIN SAS2SQL_DenominatorConditionTest DCT 
         ON DCT.Person_ID = DPT.PersonID 
         JOIN SAS2SQL_DenominatorObservationsTest DOT 
         ON DOT.PersonID = DPT.PersonID 
         WHERE DPT.D1 = 1 
         AND DPT.Age >= @AgeStart AND DPT.Age <= @AgeEnd 
         AND((@Procedure_Numerator IS NOT NULL AND 
          DPT.CareSiteName = @CareSite AND DPT.Wave = 
          @Wave 
          AND DPT.Gender = @Gender AND 
          DPRT.ProcudureSourceValue = 
          @Procedure_Numerator) 
         OR (@Condition_Numerator IS NOT NULL AND 
          DPT.CareSiteName = @CareSite AND DPT.Wave =  
          @Wave 
         AND DPT.Gender = @Gender AND 
          DCT.X_Condition_Source_Desc = 
          @Condition_Numerator) 
          OR (@Observation_Numerator IS NOT NULL AND 
          DPT.CareSiteName = @CareSite AND DPT.Wave = 
          @Wave 
          AND DPT.Gender = @Gender AND 
          DOT.ObservationSourceValue = 
          @Observation_Numerator))) 
+0

、その提案のためdnoethをいただきありがとうございます。それは働いたように見えます。波ごとに適切なカウントを含む結果しか表示されません。この訪問は、各ウェーブの開始日と終了日の間に行われ、約3ヶ月の期間です。ご協力ありがとうございました。 – M72

+0

Hmmm ...カウントがオフになっていることに関して、他の分子値でさらにテストした後も問題は残っているようです。私はこれをもっと今日作業し、解決できるかどうかを見てみましょう... – M72

関連する問題