T-SQL - 动态计算布尔字段

inv*_*ass 3 t-sql sql-server-2008

我正在使用 SQL Server 2008。

假设我有两个假设的表格,如下所示:

CREATE TABLE [Department](
    [Id]            int    IDENTITY(1,1),
    [ManagerId]     int    NULL, -- << Foreign key to the Person table
    -- other fields
)

CREATE TABLE [Person](
    [Id]            int    IDENTITY(1,1),
    [DepartmentId]  int    NOT NULL, -- << Foreign key to the Department table
    -- other fields
)
Run Code Online (Sandbox Code Playgroud)

现在,我想返回表中的行列表[Person](即给定部门的员工列表)。[ManagerId]这些行中只有一(或零)行与表中的字段匹配[Department]。我想用布尔字段动态标记匹配的行...生成的行集将类似于以下架构:

[Id]        INT,
[IsManager] BIT NOT NULL DEFAULT 0,
-- other fields
Run Code Online (Sandbox Code Playgroud)

当匹配时,该[IsManager]字段将为 TRUE 。[Department].[ManagerId][Person].[Id]

对于两个(或更多)查询来说,这是相当简单的。但是如何使用单个 SQL 语句来实现这一点呢?

rab*_*dde 5

在您的子句中添加一个表达式SELECT,将实际人员IdManagerId来自人员部门的人员进行比较

SELECT
    Person.Id,
    Department.Id,
    CAST(CASE WHEN Person.Id=Department.ManagerId THEN 1 ELSE 0 END AS BIT) AS IsManager
FROM Person
INNER JOIN Department ON Person.DepartmentId=Department.Id
WHERE Person.DepartmentId=<CONDITION>
Run Code Online (Sandbox Code Playgroud)