带有条件的SQL JOIN

时间:2013-01-07 09:46:10

标签: sql sql-server-2008 join

我正在使用SQL SERVER 2008 R2。

我的查询联接是这样的:

SELECT dbo.TARIF_COURANT.CODE_TARIF, 
dbo.TARIF_COURANT.NO_CLIENT,dbo.TARIF_COURANT.ZONE, dbo.TARIF_COURANT.UNITE, 
dbo.TARIF_COURANT.LIBELLE, dbo.TARIF_COURANT.TR_DEB, dbo.TARIF_COURANT.TR_FIN, 
dbo.TARIF_COURANT.MONTANT,dbo.T_TARIF_ZONE.LIBELLE AS ZONELIB, 
dbo.T_TARIF_ZONE.DEPARTEMENT, dbo.T_TARIF_ZONE.DELAI
FROM dbo.TARIF_COURANT LEFT OUTER JOIN dbo.T_TARIF_ZONE ON 
dbo.TARIF_COURANT.ZONE = dbo.T_TARIF_ZONE.NO_ID
WHERE (dbo.TARIF_COURANT.TEMPO = 2) AND 
(dbo.TARIF_COURANT.ZONE IN (1, 2, 3, 4, 6))
ORDER BY dbo.TARIF_COURANT.TR_DEB

现在我添加另一个表LS_CLIENT_DEPT,并修改我的连接:

SELECT  dbo.TARIF_COURANT.CODE_TARIF, dbo.TARIF_COURANT.NO_CLIENT, 
dbo.TARIF_COURANT.ZONE, dbo.TARIF_COURANT.UNITE, dbo.TARIF_COURANT.LIBELLE, 
dbo.TARIF_COURANT.TR_DEB, dbo.TARIF_COURANT.TR_FIN, dbo.TARIF_COURANT.MONTANT, 
dbo.T_TARIF_ZONE.LIBELLE AS ZONELIB, dbo.LS_CLIENT_DEPT.DEPARTEMENT, 
dbo.T_TARIF_ZONE.DELAI
FROM dbo.TARIF_COURANT LEFT OUTER JOIN dbo.T_TARIF_ZONE ON 
dbo.TARIF_COURANT.ZONE = dbo.T_TARIF_ZONE.NO_ID 
LEFT OUTER  JOIN dbo.LS_CLIENT_DEPT ON dbo.TARIF_COURANT.NO_CLIENT = 
dbo.LS_CLIENT_DEPT.CODE_CLIENT AND dbo.TARIF_COURANT.ZONE = 
dbo.LS_CLIENT_DEPT.ZONE
WHERE (dbo.TARIF_COURANT.TEMPO = 2) AND (dbo.TARIF_COURANT.ZONE IN (1, 2, 3, 
4, 6)) ORDER BY dbo.TARIF_COURANT.TR_DEB

对象是,如果表'LS_CLIENT_DEPT'中的DEPARTEMENT列为'NOT NULL',则使用此列值,否则使用表'T_TARIF_ZONE'中的DEPARTEMENT列值

提前谢谢你

1 个答案:

答案 0 :(得分:2)

听起来像你想要的那样:

COALESCE(LS_CLIENT_DEPT.DEPARTEMENT, T_TARIF_ZONE.DEPARTEMENT)

因此,部门来自LS_Client_Dept,如果它不为空,如果它为空,则从T_TARIF_ZONE返回部门(但也可能为空)。

MSDN Documentation on Coalesce