根据优先级从两列中选择

时间:2016-08-11 13:09:50

标签: sql sql-server select

我需要在SQL Server中组合两列。但是,我需要优先考虑一列。

Make    | Model      | Segment make | Segment model
--------+------------+--------------+--------------
Ferarri | California | Sport        | Null 
Ferarri | F40        | Sport        | Null 
Porsche | 911        | Sport        | Null 
Porsche | Cayenne    | Sport        | SUV
BMW     | M5         | Null         | Sport 

我需要一张包含所有型号和每辆车的部分的表格。所有模型都在段中的两列中包含段。并且,如果两列中都有一个段,我是否希望模型段覆盖make的段,如保时捷的示例所示。这是我需要的结果:

Make    | Model      | Segment  
--------+------------+--------
Ferarri | California | Sport   
Ferarri | F40        | Sport     
Porsche | 911        | Sport    
Porsche | Cayenne    | SUV
BMW     | M5         | Sport 

我搜索并找到了Rank(),但它似乎没有做我想要的。有什么建议?

提前致谢

4 个答案:

答案 0 :(得分:3)

使用coalesce()。它返回它的第一个非NULL参数:

select, Make, Model, coalesce(Segmentmodel, Segmentmake) as segment
from tablename

答案 1 :(得分:0)

select coalesce([Segment make], [Segment model]) as Segment

答案 2 :(得分:0)

我推荐像

这样的东西
select isnull(model,make) as segment

因为那时您将始终选择模型,除非模型为空。在这种情况下,它将选择make。

答案 3 :(得分:0)

尝试:

Select Make,Model,Coalesce([Segment model], [Segment make])  Segment From YourTable