2016-07-26 10 views
0

次のSELECTステートメントはSQL Server 2008でうまく機能します。最大4行まで返す代わりに、結果が1つの結果/行に連結されている必要があります。複数のcaseステートメントを連結

推測できるように、このスクリプトは投薬テーブルをチェックし、投薬が一致すると結果として条件にCASEを返します。

最初にDISTINCT、最後にIS NOT NULLを含めると、それぞれの不一致の薬物または複数の一致する薬物(糖尿病、糖尿病)の結果が最小限に抑えられました。

すべての行には、varcharのデータが含まれています。

私はCONCAT()COALESCE()を試してみましたが、毎回短くなりました。

複数の行に正しい結果を返す既存のクエリは次のとおりです。

Select DISTINCT a.conditions 
from 
    (select 
     CASE 
      WHEN medication like 'caduet' 
       THEN 'Hypertension and Cholesterol' 
      WHEN medication like '%actoplus%' 
           OR medication like '%actos%' 
           OR medication like '%amaryl%' 
       THEN 'Diabetes' 
      WHEN medication like '%altocor%' 
           OR medication like '%altoprev%' 
           OR medication like '%zocor%' 
       THEN 'Cholesterol' 
      WHEN medication like '%-nitro%' 
           OR medication like '%accupril%' 
           OR medication like '%zosin%' 
       THEN 'Hypertension' 
      ELSE NULL 
     END as Conditions 
    from 
     prescriptions 
    where 
     patientid = @contactid 
     and status = 'Active') a 
where 
    a.conditions is not null 

ありがとう!

+0

ので、あなたは出力'アスピリン糖尿病hypertension'にしたいですか? –

+0

いいえ一致すると、Then節が出力されます。既存のスクリプトは、それぞれを個々の行に出力します。私はそれらをマージする必要があります。受け入れられた答えはスタンドアロンの解決策として機能しますが、MAX()にネストされた4つの個別のCASE()としてそれらを実行するのが最も効果的です。これにより、他の処理を行うより大きなクエリにクエリを埋め込むことができます。 –

答えて

0

を使用していません。正確な構文はもう少し複雑です:MEDは `アスピリンactoplus-nitro`ような名前を持っている場合

with t as (<your query here>) 
select stuff((select ',' + conditions 
       from t 
       for xml path(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)' 
        ), 1, 1, ''); 
+0

これはスタンドアロンクエリとして機能します。それは、より大きなselectステートメントの要素としてそれを追加しようとすると分解されます(そしてストアドプロシージャにそれを組み込みます)。 xlmnamespacesのために前のステートメントはセミコロンで終わらなければならないと理解していますが、これまでのステートメントはありません。 –

0

はあなたがfor xml pathを使用して、それらを一緒に連結することができSTUFF

(Select DISTINCT a.conditions = STUFF(
         (SELECT ',' + CASE 
          WHEN medication like 'caduet' 
          THEN 'Hypertension and Cholesterol' 
          WHEN medication like '%actoplus%' 
           OR medication like '%actos%' 
           OR medication like '%amaryl%' 
          THEN 'Diabetes' 
          WHEN medication like '%altocor%' 
           OR medication like '%altoprev%' 
           OR medication like '%zocor%' 
          THEN 'Cholesterol' 
          WHEN medication like '%-nitro%' 
           OR medication like '%accupril%' 
           OR medication like '%zosin%' 
          THEN 'Hypertension' 
          ELSE NULL 
          END as Conditions 
         from prescriptions 
         where patientid = @contactid 
         and status = 'Active' 
         ) a 
         where a.conditions is not null)) as 'Conditions' 
関連する問題