查询SQL Server时创建新列

时间:2018-02-06 05:34:25

标签: sql-server

我有两张这样的表:

功能

Function

FunctionName

enter image description here

在查询时,我需要创建一个新列'Status',如果AccountId有一个函数,它将为'true',如果它不在函数中,则为'false'。我的意思是AccountId 1具有所有函数所以基本上我应该在函数的所有行中得到'true',因为AccountId 1具有所有函数,而对于AccountId 16,我应该在Status列中得到'false',因为没有AccountId的功能16.我真的不知道如何实现它。我知道怎么离开加入和东西,我不知道如何去做我需要的东西。你能帮我吗?我的微弱尝试让我对此有所了解,但我知道这还有很长的路要走。

SELECT f.FunctionId, f.FunctionName,
CASE WHEN f.FunctionId IS NOT NULL THEN 'true' ELSE 'false' END AS [Status]
FROM [AccountFunction] as af
left join [Function] as f ON f.FunctionId = af.FunctionId
where af.AccountId = 1

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您希望在函数存在时分配true状态,并在函数不存在时分配false。如果是这样,我们可以使用CASE表达式来确定状态。

SELECT *,
    CASE WHEN FuntionId IS NOT NULL THEN 'true' ELSE 'false' END AS Status
FROM yourTable;

假设您有一个包含所有帐户的Account表,并且您想要报告所有帐户的状态,请考虑以下问题:

SELECT
    t1.AccountId,
    t2.AccountFunctionId,
    t2.FunctionId,
    CASE WHEN t2.FuntionId IS NOT NULL THEN 'true' ELSE 'false' END AS Status
FROM Account t1
LEFT JOIN FunctionName t2
    ON t1.AccountId = t2.AccountId;