2017-09-19 10 views
2

수익률의 널 (null)을 적용 :크로스 내가 MS를 인용하고있어

CROSS는 테이블 반환 함수에서 설정 결과를 외부 테이블에서 행만을 적용.

이것은 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 
       ) as cat_custom_query 

... 과연, 나는 널 (null)로 행을 얻을 : 는하지만, 내 쿼리입니다. OUTER apply의 직업이 아니겠습니까? 무슨 일 이니?

답변

4

CROSS APPLY는 테이블 값 함수에서 결과 집합을 생성하는 외부 테이블의 행만 반환합니다.

예에서 행은 생성되며 행은 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 문에서 결과 열을 추가 할 수 있습니다. 어떤 SQL 객체 (테이블, 뷰, 함수 등)도 참조하지 않으므로 여기서 CROSS APPLY을 사용할 필요가 없습니다.

+0

저는 현재 cat_custom이 쿼리 이후에 null이 아니므로이 방법을 사용하지 않을 것입니다. 그러나 적어도 이제는 어떤 일이 발생하는지 알고 있습니다. 중요한 세부 사항! 귀하의 답변에 감사드립니다. –