值1的WHERE子句(如果存在)或值2(如果不存在)

时间:2016-08-15 16:59:10

标签: sql-server

MS SQL Server 2014

考虑如下表:

idkey    companyid    |column 1    |column 2
------------------------------------------------
1        0             apple        fruit 1
2        0             orange       fruit 2
3        0             grapes       fruit 3
4        10            banana       fruit 2

CompanyId = 0是默认的值列表;其他公司ID可以覆盖单个值或采用默认列表。

请注意,对于companyid = 10,'fruit 2'具有为第1列指定的不同值。

如何使用公司10覆盖选择companyid 0的值,如:

idkey    companyid    |column 1    |column 2
------------------------------------------------
1        0             apple        fruit 1
4        10            banana       fruit 2
3        0             grapes       fruit 3

有没有办法用单个SQL语句执行此操作,还是需要创建存储过程和临时表?我搜索了很多,但显然无法找到一种方法来简单地说出问题,以便搜索返回有用的答案。

1 个答案:

答案 0 :(得分:1)

select coalesce(t2.idkey, t1.idkey) as idkey,
       coalesce(t2.companyid, t1.companyid) as companyid,
       coalesce(t2.column1, t1.column1) as column1,
       coalesce(t2.column2, t1.column2) as column2
from your_table t1
left join your_table t2 on t1.column2 = t2.column2
                       and t2.companyid <> 0
where t1.companyid = 0