3
테이블 연산자 APPLY
을 이해하려고합니다.이 APPLY
를 사용하는 경우테이블 연산자를 사용하는 경우
CREATE TABLE #y (Name char(8), hoursWorked int);
GO
INSERT INTO #y VALUES ('jim',4);
INSERT INTO #y VALUES ('michael',40);
INSERT INTO #y VALUES ('raj',1000);
INSERT INTO #y VALUES ('jason',7);
INSERT INTO #y VALUES ('tim',50);
GO
CREATE TABLE #x (Name char(8),game char(8), NumBets int);
GO
INSERT INTO #x VALUES ('jim','chess',4);
INSERT INTO #x VALUES ('jim','BG',10);
INSERT INTO #x VALUES ('jim','draughts',100);
INSERT INTO #x VALUES ('jim','football',5);
INSERT INTO #x VALUES ('michael','chess',40);
INSERT INTO #x VALUES ('michael','BG',7);
INSERT INTO #x VALUES ('michael','draughts',65);
INSERT INTO #x VALUES ('michael','football',50);
INSERT INTO #x VALUES ('raj','chess',400);
INSERT INTO #x VALUES ('raj','BG',70);
INSERT INTO #x VALUES ('raj','draughts',650);
INSERT INTO #x VALUES ('tim','draughts',60000);
GO
SELECT y.Name,
y.hoursWorked,
x.game,
x.NumBets
FROM #y y
OUTER APPLY
(
SELECT TOP 2 *
FROM #x
WHERE Name = y.Name
ORDER BY NumBets
) x
ORDER BY y.Name,
x.NumBets DESC;
내 주요 장애물이 을 이해하는 것입니다 : 여기
은 예입니다.에 구현 된
standard sql
을 사용하면 위와 같은 결과를 얻는 것이 얼마나 어려울 지 궁금합니다. APPLY
쿼리를 훨씬 더 짧게 또는 더 가독성있게 만드십니까? APPLY
을 사용하는 데 큰 이점이없는 경우 APPLY
을 사용하는 이점이있는 명확한 예가 무엇입니까? 모든
+1 아주 좋은 광범위한 답변 - 아직 완전히 이것을 흡수 할 시간이 없었습니다. – whytheq
나는 'APPLY'가 2005 버전보다 짧다고 생각합니다. 확실하지는 않지만'UNPIVOT' 버전을 사용하면 좋겠지 만 좋은 트릭이지만 UNPIVOT 함수가 SQL Server의 동일한 버전과 함께 제공되는 이유는 그것을 사용하지 않는 이유입니다. 나를 위해, 최고의 응용 프로그램은 TVF와의 상호 작용 및 계산에 대한 적용의 상관 된 사용이 될 것입니다. – whytheq
나는 Apply가 row_number보다 빠를 수 있다고 생각하지만 이것에 대해서는 확신 할 수 없다. 나중에 테스트해야한다. –