我在引用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的工作吗?发生了什么事?
答案 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对象(表,视图,函数等)。