MSSQL如何联接表,对于那些空值,具体使用联接表中的一项?

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 |

请检查下表:

当表1在列ItemName上左键联接表2时,对于Pear和Orange,Coef列将为null。如何使这些未映射的项与表2中ItemName=Others的所有项匹配

目前,我正在使用temp table过滤那些空项,放入正确的coef,然后与映射的项结果联合,以得到最终的表3

有没有更好的方法来实现这一点

表1:

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非常好!谢谢