带有 WHERE 子句的 SQL 查询 CASE 语句

标签 sql sql-server

我构建了以下使用多条件 CASE 语句的查询。这是使用多条件 CASE 语句的正确/最佳方法吗?

只要我不在 where 中引用 CASE 语句,它就可以工作。我收到“无效的列名称‘场景’。”

如何在查询的 WHERE 部分中引用 ScenarioA?

select 
    TPID
    ,(CASE WHEN 
        ([AOppty] > 0) and ([Entitlements] = 0) and ([B Agreement] = 0 and [C Agreement] = 0)
    THEN 1 ELSE 0 END) as ScenarioA
from RulesEngine R
--where ScenarioA = 1

最佳答案

SQL Server 允许您为此使用公共(public)表表达式:

WITH
    Rules (TPID, ScenarioA)
AS (
    SELECT 
        TPID
    ,   (CASE WHEN 
            ([AOppty] > 0) AND ([Entitlements] = 0) AND ([B Agreement] = 0 and [C Agreement] = 0)
            THEN 1 ELSE 0 END
        ) AS ScenarioA
)
SELECT
    TPID, ScenarioA
WHERE
    ScenarioA = ...

关于带有 WHERE 子句的 SQL 查询 CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47963475/

相关文章:

c# - SQL连接字符串和cant参数visual studio 2013

sql-server - SSIS 如何管理关闭连接?我可以强制吗?

SQL Server 相当于 ORACLE INSTR

mysql - SQL连接三个表,一个表返回未知数量的结果,不想要重复的行

SQL Server FOR EACH 循环

mysql - SELECT 一个表的一行,以及另一个表中的所有行

c# - 在SQL Server中合并一列中的每两行数据

sql - 一张表中有多个唯一键

sql - 将 XML 插入 SQL Server 2008 数据库

sql - PL/SQL更新触发错误