如果找不到行,则过滤掉记录的条件

时间:2019-07-24 07:28:55

标签: sql sql-server

我有一个简单的代码

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。

3 个答案:

答案 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]