簡體   English   中英

Oracle SQL-比較列

[英]Oracle SQL - comparing columns

使用oracle SQL,在下面的數據集中,我想檢查何時B列='N',我希望它在A列中找到相同的ID,並比較C列中該ID的行。 如果它們相同,則為“ Y”,否則為“ N”,否則為null。

A   B   C       D
001 Y   Pizza   Pepperoni
002 Y   Pizza   Pepperoni
003 Y   Pizza   Pepperoni
003 N   Pizza   Sausage
004 Y   Pizza   Pepperoni
005 Y   Pizza   Pepperoni
005 N   Pizza   Sausage
005 N   Hamburger   Cheese

理想情況下,我將運行它以返回ID(列A)和case語句的結果,使其看起來像這樣...

A      B
001    (Null)
002    (Null)
003    (Null)
003    Y
004    (Null)
005    (Null)
005    Y
005    N

誰能提供給我您將使用什么代碼來完成此任務?

就像其他注釋所指出的那樣,給定您指定的規則,倒數第二行的B值應為“ N”。以下腳本根據所述規則返回正確的結果,但與示例輸出不匹配:

/* test data */ 
select '001' as a, 'Y' as b, 'Pizza' as c,       'Pepperoni' as d into testtable union all
select '002' as a, 'Y' as b, 'Pizza' as c,       'Pepperoni' as d union all
select '003' as a, 'Y' as b, 'Pizza' as c,       'Pepperoni' as d union all
select '003' as a, 'N' as b, 'Pizza' as c,       'Sausage' as d union all
select '004' as a, 'Y' as b, 'Pizza' as c,       'Pepperoni' as d union all
select '005' as a, 'Y' as b, 'Pizza' as c,       'Pepperoni' as d union all
select '005' as a, 'N' as b, 'Pizza' as c,       'Sausage' as d union all
select '005' as a, 'N' as b, 'Hamburger' as c,   'Cheese' as d
go

/* script */
select
   a
  ,case when b = 'Y' then null else
    case when c = lag(c, 1) over (partition by a order by c desc, d) then 'Y' else 'N' end
    end as b

from testtable
go


/* Results...*/

|-----+------|
| A   | B    |
|-----+------|
| 001 | NULL |
| 002 | NULL |
| 003 | NULL |
| 003 | Y    |
| 004 | NULL |
| 005 | NULL |
| 005 | Y    |
| 005 | N    |
|-----+------|

暫無
暫無

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

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