如果找不到未选择的行,则返回一个值

时间:2018-07-04 09:48:11

标签: sql oracle

这是我的简单查询。如果我查询一条不存在的记录,那么我将一无所获。

SELECT
CASE WHEN table1.column1= @column1  THEN 'XX' 
ELSE 'YY' END from table1 where table1.column2=@column2

它不返回任何选定的行。

我尝试了ISNULL(),但没有纠正

我需要返回“ YY”

任何人都可以帮忙.. !! 在此先感谢!

4 个答案:

答案 0 :(得分:0)

select
   case 
      when coalesce(table1.column1,'empty') = @column1
        then 'XX' 
      else 'YY' 
   end as SOMETHING
  from table1 
 where coalesce(table1.column2,'empty') = @column2

Coalesce用于检查该值是否为null,如果为null,则更改为列名旁边指定的值。如果您要提供数据,我可以根据您的需要更改sql查询。

答案 1 :(得分:0)

尝试一下

SELECT
CASE WHEN table1.column1= @column1  THEN 'XX' 
ELSE 'YY' END from table1 where case when table1.column2=@column2 then table1.column2 else @column2 end = @column2

注意:如果table1中有多个记录,则该查询将为所有这些行返回YY

答案 2 :(得分:0)

让它变得简单容易。 首先根据您的where条件检查数据是否可用。如果是,则执行其余的查询;如果不是,则仅返回YY

例如:

   If exists(SELECT * from table1 where table1.column2=@column2)
    begin
        SELECT
        CASE WHEN table1.column1 = @column1  THEN 'XX' 
        ELSE 'YY' END AS [COLNAME]
        from table1 where table1.column2=@column2
    end
    else
    begin
       SELECT 'YY' as [COLNAME]
    End

进一步了解https://192.168.55.10:4200

答案 3 :(得分:0)

您发布的查询带有@符号,这不是SQL-Server中Oracle变量的默认替换字符,除非您已使用

SET DEFINE @并在传递字符串文字时加上引号。不确定是否以这种方式使用它。

我建议您使用以冒号:为前缀的绑定变量

关于您的问题

  

我需要返回“ YY”

对于no rows selected,您可以将case块放在聚合函数中,例如MAX,该函数将返回包含null的行,然后COALESCE可以处理没有行时,为您提供所需值的空值。

SELECT
 COALESCE(
    MAX(
        CASE
            WHEN t.column1 =:column1  THEN 'XX'
            ELSE 'YY'
        END
    ),'YY')
FROM
    table1 t
WHERE
    t.column2 =:column2;
相关问题