sql - case within 加入 "ON"子句

标签 sql sql-server tsql case-statement

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

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 为空,则仅在一个公共(public)列上连接表。 如果不为空,则必须同时使用 POS 和 SAC 才能加入。

这可能吗?

最佳答案

不要使用大小写。只需使用直接 bool 逻辑:

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 - case within 加入 "ON"子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39850560/

相关文章:

python - 使用 cur.fetch_pandas_all() 从 Snowflake 提取数据时出现非唯一列索引错误

sql-server - 如何计算 SQL Server 中两个日期之间的小时数(十进制)差异?

sql - 在 SQL Server 中合并日期间隔

sql-server - SQL Server 数据库中所有依赖项的树

sql-server-2005 - tsql : best way to cast variables to string type?

mysql - 在多个 SQL 语句中使用 Count() 并使用 join 连接它们

php - 根据另一个数组从数组中删除行

mysql - 查找具有相同列值的行

sql - "Is Not Null"和 "Not Is Null"有什么区别

sql-server - 如何向 SQL 连接字符串添加自定义属性?