我有两张这样的表:
功能:
FunctionName :
在查询时,我需要创建一个新列'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
答案 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;