수색…


셀에서 동적으로 생성 된 행과 테이블 행 조인

CROSS APPLY를 사용하면 테이블 - 값 기능에 의해 동적으로 생성 된 행과 함께 테이블의 행을 "결합"할 수 있습니다.

제품 배열 (ProductList 열)을 포함하는 열이있는 Company 테이블과이 값을 구문 분석하고 일련의 제품을 반환하는 함수가 있다고 가정 해보십시오. 회사 테이블에서 모든 행을 선택하고이 기능을 ProductList 열에 적용한 다음 생성 된 결과를 상위 회사 행과 결합 할 수 있습니다.

SELECT *
FROM Companies c 
     CROSS APPLY dbo.GetProductList( c.ProductList ) p

각 행에 대해 ProductList 셀의 값이 함수에 제공되고 함수는 해당 행을 부모 행과 조인 할 수있는 행 집합으로 반환합니다.

셀에 저장된 JSON 배열로 테이블 행 조인

CROSS APPLY를 사용하면 열의 저장된 JSON 객체 컬렉션을 사용하여 테이블의 행을 "조인"할 수 있습니다.

JSON 배열로 포맷 된 제품 배열 (ProductList 열)을 포함하는 열이있는 Company 테이블이 있다고 가정 해보십시오. OPENJSON 테이블 값 함수는 이러한 값을 구문 분석하고 제품 집합을 반환 할 수 있습니다. 회사 테이블에서 모든 행을 선택하고 OPENJSON을 사용하여 JSON 제품을 구문 분석하고 상위 회사 행과 함께 결과를 "조인"할 수 있습니다.

SELECT *
FROM Companies c 
     CROSS APPLY OPENJSON( c.ProductList )
                 WITH ( Id int, Title nvarchar(30), Price money)

각 행에 대해 ProductList 셀의 값은 JSON 객체를 WITH 절에 정의 된 스키마가있는 행으로 변환하는 OPENJSON 함수에 제공됩니다.

배열 값별로 행 필터링

쉼표로 구분 된 값으로 행의 태그 목록을 저장하면 STRING_SPLIT 함수를 사용하여 태그 목록을 값 표로 변환 할 수 있습니다. CROSS APPLY를 사용하면 부모 행과 STRING_SPLIT 함수로 구문 분석 된 값을 "조인"할 수 있습니다.

쉼표로 구분 된 태그 (예 : promo, sales, new)의 배열을 포함하는 열이있는 Product 테이블이 있다고 가정 해보십시오. STRING_SPLIT 및 CROSS APPLY를 사용하면 제품 행을 태그와 결합하여 태그로 제품을 필터링 할 수 있습니다.

SELECT *
FROM Products p 
     CROSS APPLY STRING_SPLIT( p.Tags, ',' ) tags
WHERE tags.value = 'promo'

각 행에 대해 태그 셀의 값이 태그 값을 반환하는 STRING_SPLIT 함수에 제공됩니다. 그런 다음이 값을 기준으로 행을 필터링 할 수 있습니다.

참고 : SQL Server 2016 이전에는 STRING_SPLIT 함수를 사용할 수 없습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow