我正在尝试做这样的事情...
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/