Sql server 在多个联接查询中选择同一记录ID的第一条记录

Sql server 在多个联接查询中选择同一记录ID的第一条记录,sql-server,Sql Server,我编写了一个包含多个join语句的查询,只想选择顶部的“PT_FIN”,其中有多个相同的PT_FIN。我遇到了一个问题,就是如何在我已经编写的代码中嵌入只选择一个PT_FIN的代码 我发现了一些只在选择最上面一行时提供答案的链接,但正如我所说的,我在代码中使用这些答案时遇到了一些问题: 问题中缺少数据库模式和示例输入,但这可能是一种方法,因为您只需要验证notes的存在性,我认为exists可以解决您的问题。如果需要从相关子查询中获取多个值,则Apply也会有所帮助 DECLARE @Start

我编写了一个包含多个join语句的查询,只想选择顶部的“PT_FIN”,其中有多个相同的PT_FIN。我遇到了一个问题,就是如何在我已经编写的代码中嵌入只选择一个PT_FIN的代码

我发现了一些只在选择最上面一行时提供答案的链接,但正如我所说的,我在代码中使用这些答案时遇到了一些问题:


问题中缺少数据库模式和示例输入,但这可能是一种方法,因为您只需要验证notes的存在性,我认为exists可以解决您的问题。如果需要从相关子查询中获取多个值,则Apply也会有所帮助

DECLARE @StartDate Date
DECLARE @EndDate Date

Set @StartDate = '03/01/2018'
Set @EndDate = '03/25/2018'


Select ORD.PT_FIN, ORDER_MNEMONIC, 
CASE WHEN EXISTS(SELECT 1 FROM [ED_NOTES_MASTER] WHERE RESULT_TITLE_TEXT = 'ED Physician' AND PT_FIN = ORD.PT_FIN AND RESULT LIKE '%99143%') THEN 'Yes' ELSE 'NO' END AS BILLED_SEDATION,
CASE WHEN EXISTS(SELECT 1 FROM [ED_NOTES_MASTER] WHERE NOTE_TYPE like '%PowerNote ED%' PT_FIN = ORD.PT_FIN AND RESULT LIKE '%Sedation%') THEN 'Yes' ELSE 'NO' END AS POWER_NOTE_SEDATION
FROM [ED_Orders_Import_Master] AS ORD
WHERE [Checkin_dt_tm] > @StartDate and [Checkin_dt_tm] < @EndDate AND 
ORDER_MNEMONIC LIKE '%ketamine%' and ORIG_ORD_AS like '%Normal%' and 
ORDER_STATUS like '%complete%'
ORDER by ORD.PT_FIN
使用apply获得注释仅当是第一个,我得到了您当前的方法,并将您的内部连接切换为具有TOP 1的外部应用程序,以完成您在标题中要求的内容

Select ORD.PT_FIN, NOTE.Tracking_GROUP, NOTE.AUTHOR, 
FORMAT(ORD.CHECKIN_DT_TM, 'MM/dd/yyyy') as DOV, ORD.Order_Mnemonic, 
ORD.order_status,

CASE WHEN ORDER_MNEMONIC LIKE '%ketamine%' THEN 'YES' ELSE 'NO' END 
[KETAMINE ORDERED], ORD.DOSE,


CASE
       WHEN NOTE.RESULT LIKE '%99143%' THEN 'YES'
       ELSE 'NO'
END BILLED_SEDATION,


CASE
   WHEN NOTE2.RESULT LIKE '%Sedation%' THEN 'YES' Else 'NO' END 
 POWERNOTE_SEDATION

FROM [ED_Orders_Import_Master] AS ORD

OUTER APPLY
(
Select TOP 1 *
FROM [ED_NOTES_MASTER] 
Where  PT_FIN = ORD.PT_FIN
ANd RESULT_TITLE_TEXT = 'ED Physician Charges' AND RESULT_DT_TM > 
@StartDate and RESULT_DT_TM < @EndDate
ORDER BY RESULT_DT_TM
)
as NOTE
OUTER APPLY
(
Select TOP 1 *
FROM [ED_NOTES_MASTER]
Where PT_FIN = ORD.PT_FIN NOTE_TYPE like '%PowerNote ED%' AND RESULT_DT_TM > @StartDate and 
RESULT_DT_TM < @EndDate
ORDER BY RESULT_DT_TM
)
WHERE [Checkin_dt_tm] > @StartDate and [Checkin_dt_tm] < @EndDate AND 
ORDER_MNEMONIC LIKE '%ketamine%' and ORIG_ORD_AS like '%Normal%' and 
ORDER_STATUS like '%complete%'
ORDER by ORD.PT_FIN

数据库模式和示例输入会很有帮助
DECLARE @StartDate Date
DECLARE @EndDate Date

Set @StartDate = '03/01/2018'
Set @EndDate = '03/25/2018'


Select ORD.PT_FIN, ORDER_MNEMONIC, 
CASE WHEN EXISTS(SELECT 1 FROM [ED_NOTES_MASTER] WHERE RESULT_TITLE_TEXT = 'ED Physician' AND PT_FIN = ORD.PT_FIN AND RESULT LIKE '%99143%') THEN 'Yes' ELSE 'NO' END AS BILLED_SEDATION,
CASE WHEN EXISTS(SELECT 1 FROM [ED_NOTES_MASTER] WHERE NOTE_TYPE like '%PowerNote ED%' PT_FIN = ORD.PT_FIN AND RESULT LIKE '%Sedation%') THEN 'Yes' ELSE 'NO' END AS POWER_NOTE_SEDATION
FROM [ED_Orders_Import_Master] AS ORD
WHERE [Checkin_dt_tm] > @StartDate and [Checkin_dt_tm] < @EndDate AND 
ORDER_MNEMONIC LIKE '%ketamine%' and ORIG_ORD_AS like '%Normal%' and 
ORDER_STATUS like '%complete%'
ORDER by ORD.PT_FIN
Select ORD.PT_FIN, NOTE.Tracking_GROUP, NOTE.AUTHOR, 
FORMAT(ORD.CHECKIN_DT_TM, 'MM/dd/yyyy') as DOV, ORD.Order_Mnemonic, 
ORD.order_status,

CASE WHEN ORDER_MNEMONIC LIKE '%ketamine%' THEN 'YES' ELSE 'NO' END 
[KETAMINE ORDERED], ORD.DOSE,


CASE
       WHEN NOTE.RESULT LIKE '%99143%' THEN 'YES'
       ELSE 'NO'
END BILLED_SEDATION,


CASE
   WHEN NOTE2.RESULT LIKE '%Sedation%' THEN 'YES' Else 'NO' END 
 POWERNOTE_SEDATION

FROM [ED_Orders_Import_Master] AS ORD

OUTER APPLY
(
Select TOP 1 *
FROM [ED_NOTES_MASTER] 
Where  PT_FIN = ORD.PT_FIN
ANd RESULT_TITLE_TEXT = 'ED Physician Charges' AND RESULT_DT_TM > 
@StartDate and RESULT_DT_TM < @EndDate
ORDER BY RESULT_DT_TM
)
as NOTE
OUTER APPLY
(
Select TOP 1 *
FROM [ED_NOTES_MASTER]
Where PT_FIN = ORD.PT_FIN NOTE_TYPE like '%PowerNote ED%' AND RESULT_DT_TM > @StartDate and 
RESULT_DT_TM < @EndDate
ORDER BY RESULT_DT_TM
)
WHERE [Checkin_dt_tm] > @StartDate and [Checkin_dt_tm] < @EndDate AND 
ORDER_MNEMONIC LIKE '%ketamine%' and ORIG_ORD_AS like '%Normal%' and 
ORDER_STATUS like '%complete%'
ORDER by ORD.PT_FIN