簡體   English   中英

子查詢中的子查詢

[英]Sub-query in a sub-query

我有下表:

+-------------+------------+----------+-----------+-----------+
|  Patient No | Event Date | Exam Key | Event Key | Exam Code |
+-------------+------------+----------+-----------+-----------+
|           1 | 27/12/2015 |     4380 |      4792 | XHIPL     |
|           1 | 27/12/2015 |     4379 |      4792 | XPELV     |
|           2 | 11/02/2016 |     7006 |      2390 | XPELV     |
|           3 | 17/11/2015 |     5785 |      3948 | XHIPR     |
|           3 | 17/11/2015 |     5784 |      3948 | XPELV     |
|           4 | 13/03/2016 |     2633 |      7792 | XPELV     |
|           4 | 13/03/2016 |     2634 |      7792 | XHIPR     |
|           5 | 06/05/2016 |     6188 |      9169 | XHIPL     |
|           5 | 06/05/2016 |     6187 |      9169 | XPELV     |
|           6 | 05/09/2016 |     3396 |      3809 | XHIPR     |
|           6 | 05/09/2016 |     3397 |      3809 | XPELV     |
|           7 | 22/02/2016 |     8337 |      3706 | XPELV     |
|           7 | 22/02/2016 |     8336 |      3706 | XHIPL     |
|           8 | 27/11/2015 |     9376 |      7063 | XPELV     |
+-------------+------------+----------+-----------+-----------+

我想展示那些患有'XPELV'和'XHIPL'或'XPELV'和'XHIPR'的患者

這應該可以為您提供所需的結果:

SELECT T.*
FROM TABLE T
    INNER JOIN TABLE TT ON T.[Patient No] = TT.[Patient No]
WHERE TT.[Exam Code] = 'XPELV'
    AND EXISTS(SELECT 1 
               FROM TABLE T2 
               WHERE TT.[Patient No]=T2.[Patient No] 
                   AND (T2.[Exam Code] = 'XHIPL'
                       OR
                       T2.[Exam Code] = 'XHIPR')
               )

經過幾次測試后,這似乎是最有效的方法:

select 
    t.PatientNo,
    t.EventDate,
    t.ExamKey,
    t.EventKey,
    t.ExamCode
from #Temp as [t]
where t.ExamCode in ('XHIPL', 'XHIPR')
    and t.PatientNo in (select t2.PatientNo from #Temp as [t2] where t2.ExamCode = 'XPELV')

我為你試了幾個CTE,上面的答案使用了EXISTS。 在比較計划時,這種方法略微(我的意思是吝嗇!)更有效率。

此查詢返回所需的輸出:

SELECT  *
FROM    Patient
WHERE   [Patient No] IN (
        SELECT  DISTINCT
                p.[Patient No]
        FROM    Patient p
                JOIN ( SELECT   *
                       FROM     Patient
                       WHERE    [Exam Code] = 'XPELV'
                     ) pp ON p.[Patient No] = pp.[Patient No]
        WHERE   p.[Exam Code] IN ( 'XHIPL', 'XHIPR' ) ) ;

結果:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM