簡體   English   中英

SQL 加入嵌套查詢

[英]SQL JOIN WITH NESTED QUERY

我是SQL新手,希望得到一些指導。 我有兩個查詢需要加入和排除基於相似值的結果。 我有以下兩個查詢,它們自己運行良好,但是當我結合並嘗試根據與 member_impact 值的差異進行壓縮時,我得到的結果比我應該得到的要多。 我必須使用兩個單獨的查詢的原因是因為我需要的日期具有不同的值。 我還必須使用內部聯接,因為我需要使用的 issue_id 位於單獨的表中,這對我來說很棘手。

Select 
Rmd.Issue_Id
,Current.As_Of_Date
,Current.Member_Impact
From Lod.Ism_Issue_Summary_Hist_Wky Current
Inner Join  Lod.Rmd_Iss_Remed_Summary Rmd On Current.Issue_Id = Rmd.Issue_Id
Where As_Of_Date = '2021-08-08'
Order By Rmd.Issue_Id

Select 
Rmd.Issue_Id
,Current.As_Of_Date
,Current.Member_Impact
From Lod.Ism_Issue_Summary_Hist_Wky Current
Inner Join  Lod.Rmd_Iss_Remed_Summary Rmd On Current.Issue_Id = Rmd.Issue_Id
Where As_Of_Date = '2021-08-15'
Order By Rmd.Issue_Id ;

同樣,唯一的區別是日期。 我正在嘗試獲得最終的 output,它具有這兩個結果,並且僅觀察到 member_impact 發生了變化。 例如,第一個查詢 member_impact 是“Y”,下周它是“N”。 我寫了下面的查詢,當它運行時我得到了太多的結果。 知道我在這里錯了什么。

Select currentweek.issue_id

,Priorweek.Member_Impact
,Currentweek.Member_Impact

From 
(
Select 
Rmd.Issue_Id
,Current.As_Of_Date
,Current.Member_Impact
From Lod.Ism_Issue_Summary_Hist_Wky Current
Inner Join  Lod.Rmd_Iss_Remed_Summary Rmd On Current.Issue_Id = Rmd.Issue_Id
Where As_Of_Date = '2021-08-08'
Order By Rmd.Issue_Id )
As Priorweek 

Inner Join

(
Select 
Rmd.Issue_Id
,Current.As_Of_Date
,Current.Member_Impact
From Lod.Ism_Issue_Summary_Hist_Wky Current
Inner Join  Lod.Rmd_Iss_Remed_Summary Rmd On Current.Issue_Id = Rmd.Issue_Id
Where As_Of_Date = '2021-08-15'
Order By Rmd.Issue_Id )
As Currentweek 

On Priorweek.Member_Impact <> Currentweek.Member_Impact ;

您可以使用條件聚合在單個查詢中執行此操作:

select Rmd.Issue_Id, 
       max(case when As_Of_Date = '2021-08-08' then ish.Member_Impact end) as prev_member_impact,
       max(case when As_Of_Date = '2021-08-15' then ish.Member_Impact end) as member_impact
from Lod.Ism_Issue_Summary_Hist_Wky ish Inner Join
     Lod.Rmd_Iss_Remed_Summary ish
     On ish.Issue_Id = Rmd.Issue_Id
where As_Of_Date in ('2021-08-08', '2021-08-015')
group By Rmd.Issue_Id
having max(case when As_Of_Date = '2021-08-08' then ish.Member_Impact end) <> max(case when As_Of_Date = '2021-08-15' then ish.Member_Impact end);

從 ( Select ) 到 go 不是合適的方法。 如果您想要 go 從第一個名稱開始,例如:從表名 where 條件

暫無
暫無

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

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