【发布时间】:2013-08-10 05:03:01
【问题描述】:
我正在尝试理解表运算符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;
我的主要障碍是理解何时使用APPLY。
所以我想知道使用在sql-server 2005 中实现的standard sql 获得与上述相同的结果有多困难?APPLY 是否使查询更短或更易读?
如果这个例子没有显示使用APPLY 的巨大优势,那么使用APPLY 有优势的明显例子是什么?
【问题讨论】:
标签: sql sql-server sql-server-2012 cross-apply sql-standards