2016-03-30 44 views
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,提供者的Full_NameProvider ID比左连接子查询更好的解决方案?

约有30 provider_types

我已经使用左连接了一大堆左连接。这需要很长时间才能运行,我认为我有一个技巧,我错过了。

任何帮助?

回答

0

好吧,我以前的答案一点都没有你的意思一致。您希望对每个的每个线路上的每个线路分配一个Patient_ID以及每个Full_name。我假设每个病人只有一个类型的提供者,而不是更多;如果还有更多的话,每个病人你都会有不止一行,反正我不认为这是真的可能。

这是我的解决方案与枢轴。第一部分是让它更容易理解,所以我在子查询中创建了一个名为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只是有许多行对每一个病人,一个供应商的每一行,和枢穿上单排的一切。告诉我,如果有什么不工作。

你需要在[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或选择First(TableNames.Full_Name)例如,如果确实是一个全名是唯一的供应商ID。

注:我使用的SQL服务器语法,可以有差异与Oracle ..

+0

让我澄清一下:每个“患者ID”都是一排。每个“供应商类型”应该有一列。这些列应包含“提供者全名” – JoshuaB

+0

一个提供者类型是否只有一个提供者ID?或者你可以只有一种类型的多个ID? 现在,你澄清我更好地理解。你需要做一个关键。只需回答提供者ID和提供者类型之间的关系是否唯一,我就可以编写代码。否则,请在网络上查找“数据透视表” – BD01

+0

有多种提供商类型,并且有多个提供商ID。 – JoshuaB

相关问题