通过检查字段值从表中过滤数据

时间:2013-06-30 13:00:25

标签: sql postgresql

我有以下表结构:

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条件,它可以将当前行数据与下一行进行比较

任何人都可以帮助我如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你需要这样的东西。

select refid, model, make, style, imageid,
       coalesce(nullif(dealerId,''), max(dealerId) over (partition by refid))
from test;

它将选择max(dealerId) refid null或空dealerId

SQLFiddle

答案 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 <>''))
;

SQLFIddle

答案 2 :(得分:0)

请检查sqlfiddle中的查询 http://sqlfiddle.com/#!1/0aaca/6/0