-2

我有下表结构:

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 不为空或不为空且其他列中的数据相同。像上面的列。

我手头有 refid(这是其他表的外键),我需要选择存在 DealerId 值的行。
如果dealerId 值不存在,它也应该选择该行并继续搜索其他行。很简单,表中的两行都可以出现,其中只有一个dealerId 可用。 只是我需要在 sql 查询中使用某种 if-else 条件,它可以将当前行数据与下一行数据进行比较

谁能帮助我如何实现这一目标?

4

3 回答 3

1

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

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

它会选择max(dealerId)hasrefidnullempty dealerId

SQLFiddle

于 2013-06-30T13:41:18.617 回答
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

于 2013-07-01T08:05:15.633 回答
0

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

于 2013-06-30T13:33:25.280 回答