`

Apply简单使用举例

 
阅读更多
APPLY

   APPLY运算符把右表表达式应用左输入中的每一行。右表达式可以引用左输入中的列,对于左表中的每一行,都要计算一次右边输入中表达式。这一步会把左边每一行和来自右表表达式的相应行进行匹配,并将生成的结果集合并起来,返回组合后结果。

APPLY有两种类型:
  1、CROSS APPLY 2、OUTER APPLY
  两者的区别是如果内部(右)表表达式为外部(左)行返回的是空集,则CROSS APPLY不会返回该外部(左)行。而OUTER APPLY 会返回这样的行,对于内表表达式的属性,则使用NULL作为其占位符

举例 :
  创建一个顾客 表和一个订单员

 
SET NOCOUNT ON;


IF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orders;
IF OBJECT_ID('dbo.Customers') IS NOT NULL DROP TABLE dbo.Customers;
GO

CREATE TABLE dbo.Customers
(
  customerid  CHAR(5)     NOT NULL PRIMARY KEY,
  city        VARCHAR(10) NOT NULL
);

CREATE TABLE dbo.Orders
(
  orderid    INT     NOT NULL PRIMARY KEY,
  customerid CHAR(5)     NULL REFERENCES Customers(customerid)
);
GO

INSERT INTO dbo.Customers(customerid, city) VALUES('FISSA', 'Madrid');
INSERT INTO dbo.Customers(customerid, city) VALUES('FRNDO', 'Madrid');
INSERT INTO dbo.Customers(customerid, city) VALUES('KRLOS', 'Madrid');
INSERT INTO dbo.Customers(customerid, city) VALUES('MRPHS', 'Zion');

INSERT INTO dbo.Orders(orderid, customerid) VALUES(1, 'FRNDO');
INSERT INTO dbo.Orders(orderid, customerid) VALUES(2, 'FRNDO');
INSERT INTO dbo.Orders(orderid, customerid) VALUES(3, 'KRLOS');
INSERT INTO dbo.Orders(orderid, customerid) VALUES(4, 'KRLOS');
INSERT INTO dbo.Orders(orderid, customerid) VALUES(5, 'KRLOS');
INSERT INTO dbo.Orders(orderid, customerid) VALUES(6, 'MRPHS');
INSERT INTO dbo.Orders(orderid, customerid) VALUES(7, NULL);

SELECT * FROM dbo.Customers;
SELECT * FROM dbo.Orders;
   
--要求查询为每个顾户返回具有最大订单ID的两个订单

-- Two most recent orders for each customer
SELECT C.customerid, C.city, A.orderid 
FROM dbo.Customers AS C 
  CROSS APPLY 
    (SELECT TOP (2) O.orderid, O.customerid 
     FROM dbo.Orders AS O 
     WHERE O.customerid = C.customerid 
     ORDER BY orderid DESC) AS A;

-- Two most recent orders for each customer,
-- including customers that made no orders
SELECT C.customerid, C.city, A.orderid
FROM dbo.Customers AS C
  OUTER APPLY
    (SELECT TOP (2) O.orderid, O.customerid
     FROM dbo.Orders AS O
     WHERE O.customerid = C.customerid
     ORDER BY orderid DESC) AS A;

分享到:
评论

相关推荐

    浅谈javascript中call()、apply()、bind()的用法

    作用都是一样的,简单来说就是改变当前使用该方法的对象中的this指向,指向调用方法中的thisObj对象二者的区别(第一个参数是相同的)就是call方法中传入的参数是是一个个列举出来的,而apply方法中的参数二是一个...

    jquery插件使用方法大全

    使用jquery实现ajax同样异常简单 代码 (1) $.get("search. do",{id:1},rend); function rend(xml){ alert(xml); } (2) $.post("search. do",{id:1},rend); function rend(xml){ alert(xml); } (3) $...

    ECSHOP快递单号查询韵达插件V8.6专版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递单号查询插件圆通V8.6版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递单号查询EMS插件V8.6专版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递物流单号查询插件

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递单号查询插件中通V8.6专版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递物流单号查询插件 v8.2.zip

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! ECSHOP快递物流单号查询插件安装方法 第1步:申请...

    ECSHOP快递单号查询德邦插件V8.6专版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递单号查询百世快递插件V8.6专版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递单号查询顺丰插件V8.6专版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递单号查询国际EMS插件V8.6专版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    ECSHOP快递单号查询申通插件V8.6专版

    另有全球各国邮局邮政、国内国际小包等接口查询, 现已很好的整合在ECSHOP里,只要简单三步即可实现SHOPEX商城用户实时查看订单物流信息,有效的增加了客户体验! 安装方法  第1步:申请授权KEY  本插件采用...

    推荐JavaScript实现继承的最佳方式

    实现JavaScript继承的最简单的方式是call方法(或者apply方法)及原型链方法,但这两种方法都有缺陷,而其混合体就是很好的继承实现方式。下面举例说明: 代码如下: function Animal(age){  this.age = age; } ...

    Python核心编程第二版(ok)

     11.7.2 内建函数apply().cfilter().cmap().creduce()   11.7.3 偏函数应用   11.8 变量作用域   11.8.1 全局变量与局部变量   11.8.2 globa语句   11.8.3 作用域的数字   11.8.4 闭包...

    Python核心编程第二版

     11.7.2 内建函数apply()、filter()、map()、reduce()   11.7.3 偏函数应用   11.8 变量作用域   11.8.1 全局变量与局部变量   11.8.2 globa语句   11.8.3 作用域的数字   11.8.4 闭包...

    什么是VLAN

    比如一个路由器只有一个用于终端连接的端口(当然这种情况基本不可能发生,只不过简化举例),这个端口被分配了192.168.1.1/24的地址。然而由于公司有两个部门,一个销售部,一个企划部,每个部门要求单独成为一个...

Global site tag (gtag.js) - Google Analytics