순위 및 행 집합 함수 사용
순위 및 행 집합 함수는 단일 값을 반환하지 않으므로 스칼라 함수가 아닙니다. 이러한 함수는 행 집합을 입력으로 허용하고 행 집합을 출력으로 반환합니다.
순위 함수
순위 함수를 사용하면 사용자 정의 행 집합에 대해 계산을 수행할 수 있습니다. 이러한 함수에는 순위, 오프셋, 집계 및 배포 함수가 포함됩니다.
이 예제에서는 RANK 함수를 사용하여 ListPrice를 기반으로 순위를 계산하고 가장 높은 가격은 1로 순위가 매겨져 있습니다.
SELECT TOP 100 ProductID, Name, ListPrice,
RANK() OVER(ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
ORDER BY RankByPrice;
쿼리 결과는 다음과 같을 수 있습니다.
ProductID
이름
ListPrice
RankByPrice
749
Road-150 Red, 62
3578.27
1
750
도로-150 레드, 44
3578.27
1
751
도로-150 레드, 48
3578.27
1
771
Mountain-100 Silver, 38
3399.99
4
772
Mountain-100 Silver, 42
3399.99
4
775
Mountain-100 Black, 38
3374.99
6
...
...
...
...
끝
OVER 절을 사용하여 데이터 내에서 파티션 또는 그룹을 정의할 수 있습니다. 예를 들어 다음 쿼리는 이전 예제를 확장하여 각 범주 내의 제품에 대한 가격 기반 순위를 계산합니다.
SELECT c.Name AS Category, p.Name AS Product, ListPrice,
RANK() OVER(PARTITION BY c.Name ORDER BY ListPrice DESC) AS RankByPrice
FROM Production.Product AS p
JOIN Production.ProductCategory AS c
ON p.ProductCategoryID = c.ProductcategoryID
ORDER BY Category, RankByPrice;
이 쿼리의 결과는 다음과 같을 수 있습니다.
카테고리
제품
ListPrice
RankByPrice
Bib-Shorts
남성용 빕 숏, S
89.99
1
Bib-Shorts
남성용 빕숏, M
89.99
1
자전거 랙
히치 랙 - 4대의 자전거
120
1
자전거 스탠드
All-Purpose 자전거 스탠드
159
1
Bottles and Cages
Mountain Bottle Cage
9.99
1
Bottles and Cages
Road Bottle Cage
8.99
2
Bottles and Cages
물병 - 30 온스.
4.99
3
Bottom Brackets
HL 보텀 브래킷
121.49
1
Bottom Brackets
ML Bottom Bracket
101.24
2
Bottom Brackets
LL 하단 브라켓
53.99
3
...
...
...
...
비고
여러 행의 순위 값이 같고 일부 값은 건너뜁니다. RANK만 사용하고 있기 때문입니다. 요구 사항에 따라 동일한 순위 값에서 동점을 피하고자 할 수 있습니다. 필요에 따라 다른 함수, DENSE_RANK, NTILE 및 ROW_NUMBER 사용하여 순위 값을 제어할 수 있습니다. 이러한 함수에 대한 자세한 내용은 Transact-SQL 참조 설명서를 참조하세요.
행 집합 함수
행 집합 함수는 FROM 절에서 데이터 원본으로 사용할 수 있는 가상 테이블을 반환합니다. 이러한 함수는 행 집합 함수 자체와 관련된 매개 변수를 사용합니다. 여기에는 OPENDATASOURCE, OPENQUERY, OPENROWSET, OPENXML 및 OPENJSON이 포함됩니다.
OPENDATASOURCE, OPENQUERY 및 OPENROWSET 함수를 사용하면 원격 데이터베이스 서버에 쿼리를 전달할 수 있습니다. 그러면 원격 서버가 결과 행 집합을 반환합니다. 예를 들어 다음 쿼리는 OPENROWSET을 사용하여 SalesDB라는 SQL Server 인스턴스에서 쿼리 결과를 가져옵니다.
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=SalesDB;Trusted_Connection=yes;',
'SELECT Name, ListPrice
FROM AdventureWorks.Production.Product') AS a;
원격 서버를 사용하려면 쿼리를 실행하는 SQL Server 인스턴스에서 몇 가지 고급 옵션을 사용하도록 설정해야 합니다.
OPENXML 및 OPENJSON 함수를 사용하면 XML 또는 JSON 형식으로 구조화된 데이터를 쿼리하고 값을 테이블 형식 행 집합으로 추출할 수 있습니다.
행 집합 함수에 대한 자세한 탐색은 이 모듈의 범위를 벗어납니다. 자세한 내용은 Transact-SQL 참조 설명서를 참조하세요.