我正在尝试做这样的事情...

SELECT lc.Location, count(h.empID) as 'Count', lu.LBL
FROM swam.lookup lu
    LEFT JOIN swam.empTable h
    ON CASE
        WHEN lu.sac is null
            THEN lu.POS = h.POS
        ELSE (
            lu.POS = h.POS
            and
            lu.sac = h.sac)
    INNER JOIN swam.Locations lc
        ON h.LocationID = lc.LocationID
GROUP BY lc.Location, lu.LBL
ORDER BY lc.Location

因此,如果lu.sac为null,则仅将表连接到一个公共(public)列上。
如果不为null,则必须同时使用POS和SAC进行连接。

这可能吗?

最佳答案

不要使用case。只需使用直接 bool(boolean) 逻辑:

FROM swam.lookup lu LEFT JOIN
     swam.empTable h
     ON lu.POS = h.POS AND
        (lu.sac is null OR lu.sac = h.sac) INNER JOIN
     swam.Locations fs
     ON h.LocationID = lc.LocationID

另外,数据库引擎还可以在两个(或两个)表中的pos上建立索引索引。

关于sql - join “ON”子句中​​的情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39850560/

10-09 07:27