我有以下表结构:
refid | model | make | style | imageid | dealerId
x23 | X20 | abc | xyz | a1b-b2 |
x23 | X20 | abc | xyz | x2m-y3 | 123-456-789
y24 | m30 | jkl | efg | y3m-k3 |
y24 | m30 | jkl | efg | k3l-k3 | 333-548-373
情景1:
如果dealerid为空或为null
情景2
如果dealerid不为空或不为null,并且其他列中的数据相同。像上面的列。
我手头有refid(这是其他表的外键),我需要选择存在dealerId值的行。
如果不存在dealerId值,则还应选择该行并继续搜索其他行。简单来说,在表格中,行可以出现,其中只有一个dealerId可用。
我只需要在sql查询中使用某种if-else条件,它可以将当前行数据与下一行进行比较
任何人都可以帮助我如何实现这一目标?
答案 0 :(得分:1)
如果我理解正确,你需要这样的东西。
select refid, model, make, style, imageid,
coalesce(nullif(dealerId,''), max(dealerId) over (partition by refid))
from test;
它将选择max(dealerId)
refid
null
或空dealerId
。
答案 1 :(得分:1)
另一个答案,基于我现在对这个问题的理解。
尝试此查询:
select refid, model, make, style, imageid, dealerId
from test t1
where (dealerId is not null and dealerId <>'')
or not exists (select 1
from test t2
where t1.refid = t2.refid
and (dealerId is not null and dealerId <>''))
;
答案 2 :(得分:0)
请检查sqlfiddle中的查询 http://sqlfiddle.com/#!1/0aaca/6/0