Sql server SQL Server:不返回空值的情况

Sql server SQL Server:不返回空值的情况,sql-server,select,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 >

我有以下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

但我没有其他选项,所以其他选项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 IIF(x.cnt1 > 0 AND y.cnt2 > 0, 'Output 1', 
          IIF(x.cnt1 = 0 AND y.cnt2 > 0, 'Output 2', NULL) AS Output
FROM (SELECT COUNT(*) FROM table_PR) AS x(cnt1)
CROSS JOIN (SELECT COUNT(*) FROM table_err) AS y(cnt2)
试试这个:

您也可以尝试以下方法:

SELECT  CASE WHEN T.C1 > 0 AND T.C2 > 0 THEN 'OutPut1'
             WHEN T.C1 > 0 AND T.C2 = 0 THEN 'OutPut2'
    END AS Col
FROM    ( SELECT    T1.C1 ,
                    T2.C2
      FROM      ( SELECT    COUNT(*) AS C1
                  FROM      table_ERR
                ) AS T1
                CROSS JOIN ( SELECT COUNT(*) AS C2
                             FROM   table_PR
                           ) AS T2
    ) AS T;

这个网站是为编程问题。我们不是代码翻译服务。你做翻译,我们可能会尝试帮助修复你产生的任何问题。我对这个解决方案有一个小问题,当两个案例都为false时,案例返回null。那对我不起作用。如果两个案例都为false,则查询必须不返回任何内容。在CASE语句中添加了如果两个案例都失败将返回空字符串的其他部分。如果退出案例而不返回,情况如何?就像选择一个没有数据的表一样。可能吗?我需要一个只能返回输出1或输出2的选择。不能返回null或其他。就这两条线。这就像一个if而不是else。抱歉,我仍然不理解您的要求,您可以用示例输出更新您的问题吗?未解决查找错误-SQL Server数据库错误:“>”附近的语法不正确。@user2903517您使用的是哪一版本的SQL Server?Microsoft SQL Server 2008 R2 SP2谢谢,很高兴知道有不同的方法来解决这类问题。
SELECT  CASE WHEN T.C1 > 0 AND T.C2 > 0 THEN 'OutPut1'
             WHEN T.C1 > 0 AND T.C2 = 0 THEN 'OutPut2'
    END AS Col
FROM    ( SELECT    T1.C1 ,
                    T2.C2
      FROM      ( SELECT    COUNT(*) AS C1
                  FROM      table_ERR
                ) AS T1
                CROSS JOIN ( SELECT COUNT(*) AS C2
                             FROM   table_PR
                           ) AS T2
    ) AS T;