sql-server - SQL Server : case without a null return

标签 sql-server select

我有以下 SQL Server 代码:

declare @n_count_pr int, @n_count_err int, @v_out_pr varchar(100);

begin
   set @n_count_pr = (select count (*) from table_PR)
   set @n_count_err = (select count (*) from table_err)

   if (@n_count_err > 0 AND @n_count_pr > 0)  
      set @v_out_pr = 'Output 1'
   else if (@n_count_err > 0 AND @n_count_pr = 0) 
      set @v_out_pr = 'Output 2'

   print @v_out_pr
end;

它工作得很好,但我需要不同的结构。

我需要一个简单的选择来做同样的事情。

你能帮我吗?

在上面的过程中,我只有两个输出,没有其他输出。 如果除了输出 1 和输出 2 之外还有任何其他输出,则应将其丢弃。

就像:

如果 i = a 则输出 1 否则如果 i = b 则输出 2

但我没有 else,所以所有其他选项 i=c 或 i = d,我不在乎。我想放弃这些选项。

如果我确实想要其他选择,我会这样做:

   if (@n_count_err > 0 AND @n_count_pr > 0)  
      set @v_out_pr = 'Output 1'
   else if (@n_count_err > 0 AND @n_count_pr = 0) 
      set @v_out_pr = 'Output 2'
   else
      set @v_out_pr = 'any other option'

--找到了解决方案:)

select bit from 
     (SELECT CASE 
        WHEN  (SELECT COUNT (*) FROM TABLE_ERR) > 0 AND (SELECT COUNT (*) FROM TABLE_PR) > 0 THEN 'OUTPUT 1'
        WHEN  (SELECT COUNT (*) FROM TABLE_ERR) > 0 AND (SELECT COUNT (*) FROM TABLE_PR) = 0 THEN 'OUTPUT 2'
        ELSE null
        END as bit) Mytable
        where bit is not null

最佳答案

试试这个:

SELECT CASE 
        WHEN  (SELECT COUNT (*) FROM TABLE_ERR) > 0 AND (SELECT COUNT (*) FROM TABLE_PR) > 0 THEN 'OUTPUT 1'
        WHEN  (SELECT COUNT (*) FROM TABLE_ERR) > 0 AND (SELECT COUNT (*) FROM TABLE_PR) = 0 THEN 'OUTPUT 2'
        ELSE ''
        END

关于sql-server - SQL Server : case without a null return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38186843/

相关文章:

sql-server - Sql server 报表服务选择文本

sql - Varchar(Max) 在 Exec 中不起作用

sql-server - 如何在另一个模式SSMS中创建表

sql-server - 在具有切碎/扁平 xml 字段的大表上更快地选择

MySQL:使用select语句+计算创建函数

sql-server - Async/Await 片段在以 MS-SQL-Server 为目标时发生死锁(如预期),但在以 Oracle 为目标时不会死锁(意外)

sql - 在 TSQL 错误消息之后获取文件中的行号

html - Angularjs 选择对象的 ng-model 绑定(bind)

mysql - 使用 DISTINCT(多列)和 MAX(另一列)计算行数

MySQL - SELECT 返回模糊的空值