交叉应用产生空值

时间:2017-09-19 07:29:44

标签: sql-server tsql cross-apply

我在引用MS:

  

CROSS APPLY仅返回外表生成的行   表值函数的结果集。

这意味着它不会返回具有空值的行,对吗? 但是,我的查询是:

select ....,cat_custom,....
from ...(various inner joins)...                
cross apply
                (
                    select  
                        case 
                            when i.cat1='01' then 1
                            when i.cat2='04' then 2
                            when i.cat2='07' then 3
                            when i.cat2 in ('08') or i.cat3 in ('014','847') then 4
                            else null 
                        end as cat_custom
                ) as cat_custom_query

......果然,我得到的是带有空值的行。那不是OUTER apply的工作吗?发生了什么事?

1 个答案:

答案 0 :(得分:4)

  

CROSS APPLY仅返回外表生成的行   表值函数的结果集。

在您的示例中,生成一行 - row,返回NULL值。

你可以试试这个:

select ....,cat_custom,....
from ...(various inner joins)...                
cross apply
                (
                    select  
                        case 
                            when i.cat1='01' then 1
                            when i.cat2='04' then 2
                            when i.cat2='07' then 3
                            when i.cat2 in ('08') or i.cat3 in ('014','847') then 4
                            else null 
                        end as cat_custom
                    WHERE i.cat1 IN ('01', '04', '07', '08', '014', '847')
                ) as cat_custom_query

此外,如果这是您的真实查询的一部分,您可以在SELECT语句中添加结果列。这里不需要使用CROSS APPLY,因为您没有引用任何SQL对象(表,视图,函数等)。