2017-02-17 9 views
0

次のクエリを取得し、各患者(MRNベース)が両方ともプロシージャコードリストIN( '115-1'、 '117- 1 '、' 311-1 ')AND ProcedureCodeList =' 119-103 'ネストされたクエリWHEREプロシージャのコードIN AND AND

SELECT P.SiteID, O.ProcedureCodeList, P.MRN, PINFO.LastName, PINFO.FirstName, PINFO.[State] AS Species, PINFO.City AS Breed, O.ProcedureDescList, RF.FieldName, RF.FieldValue, R.ContentText 
, R.LastSignDate 

FROM ReportFinding RF 

INNER JOIN Report R 
ON RF.ReportID = R.ReportID 
INNER JOIN [Order] O 
ON R.ReportID = O.ReportID 
INNER JOIN Visit V 
ON O.VisitID = V.VisitID 
INNER JOIN Patient P 
ON P.PatientID = V.PatientID 
INNER JOIN PersonalInfo PINFO 
ON P.PersonalInfoID = PINFO.PersonalInfoID 

WHERE 
O.ProcedureCodeList IN ('115-1','117-1','119-103') 

ORDER BY R.LastSignDate DESC 
+1

プロシージャコードリストIN( '115-1'、 '117-1'、 '311-1')とプロシージャコードリスト= '119-103'はプロシージャコードリスト '119-103'と同じです...あなたがタイプミスをしている可能性があります。 –

答えて

0

これを解決する方法はいくつかあります。 1つの方法は、2つのサブクエリを作成し、それらをMRNに参加させることです。

SELECT a.SiteID, a.ProcedureCodeList, a.MRN, a.LastName, a.FirstName, a.Species, a.Breed, a.ProcedureDescList, a.FieldName, a.FieldValue, a.ContentText, a.LastSignDate 
FROM 
(SELECT P.SiteID, O.ProcedureCodeList, P.MRN, PINFO.LastName, PINFO.FirstName, PINFO.[State] AS Species, PINFO.City AS Breed, O.ProcedureDescList, RF.FieldName, RF.FieldValue, R.ContentText, R.LastSignDate 
FROM ReportFinding RF 
INNER JOIN Report R ON RF.ReportID = R.ReportID 
INNER JOIN [Order] O ON R.ReportID = O.ReportID 
INNER JOIN Visit V ON O.VisitID = V.VisitID 
INNER JOIN Patient P ON P.PatientID = V.PatientID 
INNER JOIN PersonalInfo PINFO ON P.PersonalInfoID = PINFO.PersonalInfoID 
WHERE O.ProcedureCodeList IN ('115-1','117-1','119-103')) as a 
JOIN 
(SELECT P.MRN 
FROM [Order] 
INNER JOIN Visit V ON O.VisitID = V.VisitID 
INNER JOIN Patient P ON P.PatientID = V.PatientID 
WHERE O.ProcedureCodeList = '119-103') as b ON a.MRN = b.MRN 
ORDER BY a.LastSignDate 

2番目のクエリでPersonalInfoテーブルは必要ありません。あなたのJOINに基づいて、ReportFindingとReportのどちらかとは思えません。これらのテーブルが実際に何をしているかによって異なります。

もう一つの方法は、元のクエリで始まり、WHERE句(BY ORDER前)に以下を追加します。

AND P.MRN IN 
(SELECT P.MRN 
FROM [Order] 
INNER JOIN Visit V ON O.VisitID = V.VisitID 
INNER JOIN Patient P ON P.PatientID = V.PatientID 
WHERE O.ProcedureCodeList = '119-103') 

私はより良い1であるかを知るために、両方のソリューションの実行計画を見ますこの場合。

+0

これは最終的に私がそれが必要なことを行います、ありがとう。私が遭遇した問題は、オリジナルの思考プロセスで、元のクエリWHERE句にWHERE句を追加することでした。 '%free air%'のようなr.ContentTextです。しかし、私は119-3にはレポートがないことを忘れています。したがって、上記のようにクエリを実行すると、119-3がある行がリストされません。それはありますが、最終的に私は私の要求を私に見せてくれます。だから私はこれで十分だと思う。 –

関連する問題