私はかなりピクルスにいます!患者のワクチンに関する情報を含むテーブルをチェックしています。患者ごとに、4 つの列に 3 つの可能なワクチンが保管されています。これらのワクチンには、ワクチンが有効であったかどうかを表す関連する yes/no 値があります。これらのワクチン行にはそれぞれ、投与される可能性のあるワクチンの名前を保持する「静的な」de_name 列がありました。ワクチンの値が yes の場合、ワクチンが投与された日付の値を保持する関連行もあります。幸いなことに、日付を含むこの 2 行目にはフィールドの名前も含まれており、どのワクチンが投与されたかを推測するために使用できました。このテーブルの行の性質により、各可能性をそれに変換する以外に、各患者を検索する明白な方法は (私には) ありませんでした。独自の列を作成し、結果を結合します。これにより、投与されたワクチンとワクチンが投与された日付の両方について、2 つのきれいな列を作成することができました。ワクチンの名前と日付が存在するという事実により、日付フィールド自体のみを使用できたため、yes/no 値に関連する行を参照する必要がなかったため、これは機能しました。
はい/いいえの値を保持する代わりに、フリーテキストを含む4番目のワクチンを追加するように求められるまで、すべてがうまくいきました. フリーテキストを他のワクチンの「静的」テキストと同じ列に配置するように依頼されました. 残りのワクチンとは異なり、4 番目のワクチンの日付行には、日付以外の行のワクチンのフリーテキスト エントリを表示する列がなかったため、これは問題です。4 行目のフリーテキストを参照しながら、4 行目の関連するワクチンの日付行の日付値も参照する必要がありました。問題が発生するのは、合体ステートメント内の Case ステートメント内で (永続的な訪問番号によって) 行に結合する方法がわからない場合です! どんな助けでも素晴らしいでしょう!
他に必要なデータがあれば教えてください。いくつかのダミーデータと、クエリが現在表示しているものを不安げに含めています。
Data_Points テーブル:
De_Num De_Name De_Value Perm_Visit_Num PatientID
6224 Flu vaccine yes 10111 12
6225 Flu vaccine date administered 11/00/2012 10111 12
6226 Pneumonia vaccine yes 10112 12
6227 Pneumonia vaccine date administered 11/01/2012 10112 12
6228 Tetanus vaccine yes 10113 12
6229 Tetanus vaccine date administered 11/02/2012 10113 12
6230 Other vaccine arbitrary free-text 10114 12
6231 Other vaccine date administered 11/03/2012 10114 12
6224 Flu vaccine yes 10115 10
6225 Flu vaccine date administered 11/00/2012 10115 10
6226 Pneumonia vaccine yes 10116 10
6227 Pneumonia vaccine date administered 11/01/2012 10116 10
6228 Tetanus vaccine yes 10117 10
6229 Tetanus vaccine date administered 11/02/2012 10117 10
6230 Other vaccine more arbitrary free-text 10118 10
6231 Other vaccine date administered 11/03/2012 10118 10
マイクエリ
select *
from
(select
COALESCE(
CASE
WHEN de_num = '6225' THEN DE_Name
END,
CASE
WHEN de_num = '6227' THEN DE_Name
END,
CASE
WHEN de_num = '6229' and perm_visit_num in (select perm_visit_num from data_points where de_num = '6228' and de_value = 'Yes') THEN de_name
END,
CASE
WHEN de_num = '6230' THEN DE_Value
END
) VaccineAdministered,
COALESCE(
CASE
WHEN de_num = '6225' THEN CASE DE_Value WHEN null THEN null ELSE DE_Value END
END,
CASE
WHEN de_num = '6227' THEN CASE DE_Value WHEN null THEN null ELSE DE_Value END
END,
CASE
WHEN de_num = '6229' and perm_visit_num in (select perm_visit_num from data_points where de_num = '6228' and de_value = 'Yes') THEN CASE DE_Value WHEN null THEN null ELSE DE_Value END
END,
CASE
WHEN de_num = '6230' THEN 'foo'
END
)
from data_points
WHERE DE_Num in ('6227','6225','6229','6230')
)
where vaccineadministered != ''
そのダミー データと上記の現在の SQL クエリを含む結果セット:
Vaccine Administered DateAdministered
Flu vaccine date administered 11/00/2012
Pneumonia vaccine date administered 11/01/2012
Tetanus vaccine date administered 11/02/2012
arbitrary free-text foo
Flu vaccine date administered 11/00/2012
Pneumonia vaccine date administered 11/01/2012
Tetanus vaccine date administered 11/02/2012
more arbitrary free-text foo
私の問題は、フリーテキストと関連する日付の両方を取得する方法がわからないことです。またはのいずれかを取得できます。このクエリでは、フリーテキストを取得します。
これは説明するのが非常に難しいことであり、私は本当に助けが必要であることを理解してください. ありがとう!