相关子查询为空

时间:2018-10-26 12:24:59

标签: tsql

我需要在CASE WHEN语句中使用相关子查询。问题是在某些情况下相关子查询可能返回NULL。我将相关子查询与另一列结合在一起,因为子查询返回NULL,所以我在“结果”列中收到了null。

这里是例子:

create table ##sygnatura (ID int, syg_numer varchar(50))

create table ##sprawa (ID int, sp_numer varchar(50))

create table ##dluznik (ID int, nazwa varchar(max))

insert into ##sygnatura 
select null,null

insert into ##sprawa
select 1,'abc'

insert into ##dluznik
select 1,'XYZ'

select sp_numer,
case when nazwa='XYZ' then (select isnull(syg_numer,'') from ##sygnatura where ##sygnatura.ID=##sprawa.ID)+', '+isnull(nazwa, '')  end as result
From ##sprawa 
join ##dluznik on  ##sprawa.ID=##dluznik.ID

3 个答案:

答案 0 :(得分:3)

您需要移动ISNULL来封装子查询,因为由于子查询未返回任何行而导致得到NULL结果:

select sp_numer,
case when nazwa='XYZ' then ISNULL((select isnull(syg_numer,'') from  ##sygnatura where ##sygnatura.ID=##sprawa.ID) + ', ','') + isnull(nazwa, '')    end as result
From ##sprawa 
join ##dluznik on  ##sprawa.ID=##dluznik.ID

答案 1 :(得分:0)

下面是一种方法,但是比使用EXISTS

select sp_numer,
case when nazwa='XYZ' 
            and exists (select 1 from ##sygnatura where ##sygnatura.ID=##sprawa.ID)
        then (select isnull(syg_numer,'') from ##sygnatura where ##sygnatura.ID=##sprawa.ID)+', '+isnull(nazwa, '')  
    else isnull(nazwa, '') 
    end as result
From ##sprawa 
join ##dluznik on  ##sprawa.ID=##dluznik.ID

答案 2 :(得分:0)

我认为您可以使用另一个JOIN这样轻松地获得预期结果:

select sp_numer, 
case when nazwa='XYZ' then isnull(syg_numer + ', ', '') + isnull(nazwa, '')  end as result
From ##sprawa 
join ##dluznik on  ##sprawa.ID=##dluznik.ID
left join ##sygnatura on  ##sprawa.ID=##sygnatura.ID