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 语句来实现这一点呢?
在您的子句中添加一个表达式SELECT,将实际人员Id与ManagerId来自人员部门的人员进行比较
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)