MSSQL如何联接表,对于那些空值,具体使用联接表中的一项?
请检查下表: 当表1在列ItemName上左键联接表2时,对于Pear和Orange,Coef列将为null。如何使这些未映射的项与表2中ItemName=Others的所有项匹配 目前,我正在使用temp table过滤那些空项,放入正确的coef,然后与映射的项结果联合,以得到最终的表3 有没有更好的方法来实现这一点 表1:MSSQL如何联接表,对于那些空值,具体使用联接表中的一项?,sql,sql-server,select,join,Sql,Sql Server,Select,Join,请检查下表: 当表1在列ItemName上左键联接表2时,对于Pear和Orange,Coef列将为null。如何使这些未映射的项与表2中ItemName=Others的所有项匹配 目前,我正在使用temp table过滤那些空项,放入正确的coef,然后与映射的项结果联合,以得到最终的表3 有没有更好的方法来实现这一点 表1: ItemName | Cost | Apple | 1 | Banana | 2 | Pear | 3 |
ItemName | Cost |
Apple | 1 |
Banana | 2 |
Pear | 3 |
Orange | 4 |
表2:
ItemName | Coef |
Apple | 0.1 |
Banana | 0.2 |
Others | 0.8 |
预期成果:
ItemName | Cost | Coef |
Apple | 1 | 0.1 |
Banana | 2 | 0.2 |
Pear | 3 | 0.8 |
Orange | 4 | 0.8 |
您可以将结果与该单行交叉连接,并获取第一个非空值:
SELECT t1.itemname, t1.cost, COALESCE(t2.coef, def.coef)
FROM t1
LEFT JOIN t2 ON t1.itemname = t2.itemname
CROSS JOIN (SELECT coef
FROM t2
WHERE itemname = 'Others') def
您可以将结果与该单行交叉连接,并获取第一个非空值:
SELECT t1.itemname, t1.cost, COALESCE(t2.coef, def.coef)
FROM t1
LEFT JOIN t2 ON t1.itemname = t2.itemname
CROSS JOIN (SELECT coef
FROM t2
WHERE itemname = 'Others') def
可以使用两个左连接:
select t1.*,
coalesce(t2.coef, t2o.coef) as coef
from t1 left join
t2
on t1.itemname = t2.itemname left join
t2 t2o
on t2o.itemname = 'Others';
可以使用两个左连接:
select t1.*,
coalesce(t2.coef, t2o.coef) as coef
from t1 left join
t2
on t1.itemname = t2.itemname left join
t2 t2o
on t2o.itemname = 'Others';
您真正使用的数据库是MySQL还是SQL Server?请标记您真正使用的数据库,MySQL还是SQL Server?请标记corectlyMinor或拼写:“others”=>“others”效果很好!ThxMinor拼写:“others”=>“others”效果很好!ThxMinor拼写:itername=>itemname非常好!ThxMinor拼写:itername=>itemname非常好!谢谢