簡體   English   中英

子查詢中的CASE語句

[英]CASE Statement inside a subquery

我可以從下面的帖子獲得幫助后創建以下查詢

select * from duppri t
where exists (
  select 1
  from duppri
  where symbolUP = t.symbolUP
  AND date = t.date
  and price <> t.price)
  ORDER BY date

SQL檢查何時配對不匹配

現在,我意識到我需要添加一個case語句來指示何時上述所有條件都適合,但是duppri和t.duppri之間的類型值相等。 發生這種情況是由於區分大小寫。 此查詢是為了清理一個投資組合記帳系統,該系統由於沒有強大的參照完整性或約束性而不幸地允許大量重復。

我希望case語句產生列“ isMatch”

Date      |Type|Symbol   |SymbolUP |Concatt      |Price |IsMatch
6/30/1995 |gaus|313586U72|313586U72|gaus313586U72|109.25|Different
6/30/1995 |gbus|313586U72|313586U72|gbus313586U72|108.94|Different
6/30/1995 |agus|SRR      |SRR      |agusSRR      |10.25 |Different
6/30/1995 |lcus|SRR      |SRR      |lcusSRR      |0.45  |Different
11/27/1996|lcus|LLY      |LLY      |lcusLLY      |76.37 |Matched
11/27/1996|lcus|lly      |LLY      |lcusLLY      |76    |Matched
11/28/1996|lcus|LLY      |LLY      |lcusLLY      |76.37 |Matched
11/28/1996|lcus|lly      |LLY      |lcusLLY      |76    |Matched

我嘗試了以下CASE語句,但它正在創建錯誤

SELECT * from duppri t
where exists (
  select 1,
  CASE IsMatch WHEN [type] = [t.TYPE] THEN 'Matched' ELSE 'Different' END
  from duppri
  where symbolUP = t.symbolUP
  AND date = t.date
  and price <> t.price) 

  ORDER BY date

如果我理解正確,則可以只使用窗口函數:

select d.*,
       (case when mint = maxt
             then 'Matched' else 'Different'
        end)
from (select d.*, 
             min(type) over (partition by symbolup, date) as mint,
             max(type) over (partition by symbolup, date) as maxt,
             min(price) over (partition by symbolup, date) as minp,
             max(price) over (partition by symbolup, date) as maxp
      from duppri d
     ) d
where minp <> maxp
order by date;

與存在謂詞一起使用的子查詢不能且不會返回true / false以外的任何內容,但是您可以使用這樣的子查詢來完成所需的工作,該子查詢應該可以工作:

select 
  *, 
  (select 
   CASE when count(distinct type) = 1 THEN 'Matched' ELSE 'Different' END
   from duppri
   where symbol = t.symbol and date = t.date
  ) IsMatch
from duppri t
where exists (
  select 1
  from duppri
  where symbol = t.symbol
  and price <> t.price);

暫無
暫無

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

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