首页 > 解决方案 > Microsoft SQL Server - 条件变量赋值

问题描述

我试图在 Microsoft SQL Server 中做这样的事情:

DECLARE @isparent int;

SET @isparent = iif(account.parentid is not null,
                    1,
                    0);

SELECT
    IIF(@isparent = 1,
        parentenrollment,
        enrollment)            "Enrollment"
FROM
    Accounts

显然这大大简化了,但想法是在一个变量(@isparent,上面)中存储一个基于表中某些内容的值,然后重新读取该变量,使用它来确定要显示的值。

这可能吗?如果是这样,怎么做?

标签: sqlsql-servertsql

解决方案


根据您的代码,您不需要变量,我认为您正在尝试这样做

SELECT
    IIF(parentid is not null,
        parentenrollment,
        enrollment) Enrollment
FROM
    Accounts

和它一样

SELECT CASE WHEN ParentId IS NOT NULL THEN ParentEnrollment
            ELSE Enrollment
       END Enrollment
FROM Accounts

如果您真的想检查是否parentid为空并将值存储在变量中,那么您的查询应该返回一 (1) 行,这可以通过两种方式完成

  • TOP 和 ORDER BY

    SELECT TOP 1 @isparent = IIF(parentid IS NOT NULL, 1, 0)
    FROM Accounts
    ORDER BY <Your Order Here>
    
  • 带有仅返回 1 行的条件的 WHERE 子句

    SELECT @isparent = IIF(parentid IS NOT NULL, 1, 0)
    FROM Accounts
    WHERE <Type Your Condition(s) Here>
    

推荐阅读