0
TablePatient.Patient_ID(PK) 

TableProviders.Encounter (joins to PK) 

TableProviders.Provider_Type 

TableProviders.Provider_ID 

TableNames.Full_Name 

TableNames.Provider_ID (joins to Table Names) 

すべてPatient_IDsについては、すべてProvider IDのプロバイダのFull_Nameが表示されます。左結合サブクエリよりも優れたソリューションですか?

約30件あります。provider_typesです。

私はこれを既に左結合を大量の左結合を使って作っています。走るのに時間がかかり、欠けているトリックがあると思っています。

助けが必要ですか?

答えて

0

[OK]を、私の前の答えは、あなたが何を意味するのか全く一致しませんでした。テーブルをピボット回転させて、各ラインにPatient_IDFull_nameを1つずつ、provider_typeごとに配置します。私は各患者が1つのタイプのプロバイダを1つしか持たず、それ以上ではないと仮定します。それ以上あれば、各患者に複数の行があり、とにかくそれは本当に可能だとは思わない。

私の解決策はピボットです。最初の部分はわかりやすいようにするため、サブクエリにTABLE_PATIENTという名前のテーブルを作成します。

WITH TABLE_PATIENT AS 
( 
SELECT TablePatient.Patient_ID, 
TableProviders.Provider_Type, 
TableNames.Full_Name 


FROM TablePatient LEFT JOIN 
TableProviders on TablePatient.Patient_ID = TableProviders.Encounter 
LEFT JOIN 
TableNames on TableNames.Provider_ID = TableProviders.Provider_ID 

group by TablePatient.Patient_ID, 
TableProviders.Provider_Type, 
TableNames.Full_Name 
) 

SELECT * 
FROM TABLE_PATIENT 
PIVOT 
(
    min(Full_name) 
    for Provider_type in ([type1], [type2],[type3]) 
) AS PVT 

のでTABLE_PATIENTはただ1つのプロバイダ各行で、各患者のために多くの行があり、ピボットは、単一の行にすべてを置きます。何かがうまくいかないか教えてください。

あなたは[type1]、[type2]などで必要なすべてのタイプを書く必要があります。[]内に入れるだけで、他の文字は 'または他のものとして必要ありません。

いくつかの型だけを置くと、他の型のプロバイダは表示されません。

何か問題がないか教えてください。

+0

素晴らしいです。それは素晴らしい仕事でした。ありがとう。 – JoshuaB

+0

それを聞いてうれしい。私の答えを確認してください。 :) – BD01

+0

"CASE"を出力に追加する方法はありますか?私は、 "TABLE_PATIENT"のエイリアス "T"を作成した後に "*、"、 "TABLE_PATIENT。*"、 "T. *"を試しましたが、うまくいきませんでした。 – JoshuaB

0

あなたが何を意味しているのか分かっている場合は、回答を患者IDとプロバイダIDでグループ化するだけです。完全な名前はプロバイダーIDの権利で一意ですか?

これは

SELECT TablePatient.Patient_ID, 
TableProviders.Provider_ID, 
TableNames.Full_Name 


FROM TablePatient LEFT JOIN 
TableProviders on TablePatient.Patient_ID = TableProviders.Encounter 
LEFT JOIN 
TableNames on TableNames.Provider_ID = TablerProviders.Provider_ID 

group by TablePatient.Patient_ID, 
TableProviders.Provider_ID, 
TableNames.Full_Name 

あなたはどちらかをグループTableNames.Full_Nameによって、または実際に完全な名前は、プロバイダのIDに一意である場合、たとえばFirst(TableNames.Full_Name)を選択するようなものでなければなりません。

注:私は、SQLサーバーの構文を使用し、オラクルとの違いがあることができます。..

+0

明らかにしましょう。すべての「患者ID」は行です。 「プロバイダタイプ」ごとに1つの列が必要です。これらの列には「プロバイダフルネーム」が含まれている必要があります – JoshuaB

+0

1つのプロバイダタイプに対して1つのプロバイダIDのみがありますか?あるいは、1つのタイプに対して複数のIDを持つことができますか? あなたは私がより良く理解することを明確にしました。ピボットをする必要があります。プロバイダIDとプロバイダタイプの関係がユニークで、コードを書くことができれば答えてください。そうでない場合は、Web上で "ピボット"を探します。 – BD01

+0

複数のプロバイダタイプがあり、複数のプロバイダIDがあります。 – JoshuaB

関連する問題