Sql 根据条件设置变量
我有一个带有case子句的简单变量赋值,如:Sql 根据条件设置变量,sql,tsql,Sql,Tsql,我有一个带有case子句的简单变量赋值,如: DECLARE @CurrentType INT SELECT @CurrentType = (CASE WHEN [CL].[ProjectKey] IS NOT NULL THEN 0 ELSE 1 END) FROM [Project] AS [P]
DECLARE @CurrentType INT
SELECT
@CurrentType = (CASE
WHEN [CL].[ProjectKey] IS NOT NULL
THEN 0
ELSE 1
END)
FROM [Project] AS [P]
LEFT JOIN [CallLog] AS [CL] ON [P].[ProjectKey] = [CL].[ProjectKey]
SELECT
@CurrentType
但它总是返回NULL,而不是1或0
我还尝试使用IIF
conditional-like:
DECLARE @CurrentType INT = (SELECT
IIF([CL].[ProjectKey] IS NOT NULL , 1 , 0)
FROM [Project] AS [P]
LEFT JOIN [CallLog] AS [CL] ON [P].[ProjectKey] = [CL].[ProjectKey] )
SELECT
@CurrentType
但同样的历史,我怎样才能得到渴望的结果呢?哪一个是1还是0?关于此表达式:
SELECT @CurrentType = (CASE WHEN [CL].[ProjectKey] IS NOT NULL THEN 0 ELSE 1 END)
FROM [Project] [P] LEFT JOIN
[CallLog] [CL]
ON [P].[ProjectKey] = [CL].[ProjectKey];
如果查询未返回任何行,则只能将@CurrentType
设置为NULL
。假设您使用的是左联接
,这意味着项目
为空
如果将其更改为聚合查询,还将获得一行,因此这可能会满足您的需要:
SELECT @CurrentType = (CASE WHEN MAX([CL].[ProjectKey]) IS NOT NULL THEN 0 ELSE 1 END)
FROM [Project] [P] LEFT JOIN
[CallLog] [CL]
ON [P].[ProjectKey] = [CL].[ProjectKey];
我尝试过,但仍然得到空值,但你给了我一个想法,我做到了
(当计数(1)>为0时,则为0,否则为1结束)
,它可以工作!谢谢,注意:我不知道这是否是一个解决办法,但在我的工作case@Leon . . . 我的意思是类似的,但是我把MAX()
放错了位置。看看ISNULL函数……它会给你一个默认值,而不是null。