我有一个简单的代码
SELECT @Setting =(CASE
WHEN @capName = 'role1'
AND .....?
THEN 1
...... --More than 1 case
ELSE 0
END)
FROM table1 t
WHERE t.accountId = 'nameA'
AND t.capName IN ('role1','role2')
我要在此处创建列 capName 的条件,以便当table1 没有行时,@ Setting将返回1。
答案 0 :(得分:2)
也许COALESCE是您要寻找的东西:
SELECT @Setting = COALESCE((CASE
WHEN @capName = 'role1'
AND .....?
THEN 1
ELSE 0
END), 1)
FROM table1 t
WHERE t.accountId = 'nameA'
AND t.capName IN ('role1','role2')
答案 1 :(得分:0)
尝试
-- Default when no relevant rows exist
SET @Setting = 1;
-- Try change it if any row exists
SELECT @Setting =(CASE
WHEN @capName = 'role1'
AND .....?
THEN 1
...... --More than 1 case
ELSE 0
END)
FROM table1 t
WHERE t.accountId = 'nameA'
AND t.capName IN ('role1','role2')
答案 2 :(得分:0)
正如您所提到的,您有多种情况,因此,如果有帮助,请查看此代码。 如果没有行,则默认将@Setting设置为1,然后默认情况下将获得1,否则您的案例就可以解决问题。
declare @capName varchar(10) = 'role1',
@Setting int = 1
select @Setting = (CASE
WHEN @capName = 'role1'
THEN 1
WHEN @capName = 'role2'
THEN 2
WHEN @capName = 'role3'
THEN 3
ELSE 0
END)
FROM table1 t
WHERE t.accountId = 'nameA'
AND t.capName IN ('role1','role2')
SELECT @Setting as [setting]