`

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;

分享到:
评论

相关推荐

    android的SharedPreferences用法举例源代码

    `commit()`是同步操作,`apply()`是异步的,但通常推荐使用`apply()`,因为它不会阻塞UI线程。 示例代码: ```java SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE); ...

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

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

    Idea集成Activiti配置及举例

    下面将详细介绍如何在Idea中配置Activiti以及通过一个简单的员工请假、老板审批流程来展示其使用方法。 首先,我们需要准备以下环境: 1. 安装IntelliJ IDEA 2. 引入Activiti相关的依赖库,通常我们会在Maven或...

    SharedPreferences

    以下是一个简单的`SharedPreferences`使用示例,用于记录用户的登录状态: ```java // 获取SharedPreferences对象 SharedPreferences sharedPreferences = getSharedPreferences("LoginStatus", MODE_PRIVATE); //...

    JavaScript学习点滴 call、apply的区别

    例如,在一个简单的继承实现中,可以这样使用call方法: ```javascript function Class1() { this.showTxt = function(txt) { alert(txt); } } function Class2() { Class1.call(this); } var c2 = new ...

    Android中SharedPreference使用实例讲解

    在Android开发中,SharedPreference是一种轻量级的数据存储机制,用于保存应用的简单键值对数据,如用户偏好设置或一些临时状态。在本实例中,我们主要关注如何使用SharedPreference来实现登录界面记住密码的功能。 ...

    使用 js 简单的实现 bind、call 、aplly代码实例

    `_apply`方法实现了这个功能,同样改变`this`值并执行函数,但使用`...args`来展开数组参数。 ```javascript Function.prototype._apply = function(obj,arg){ var me = this; var k = Symbol("test"); obj[k]...

    python熵权法(csdn)————程序.pdf

    x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x)))) rows, cols = x.shape k = 1.0 / math.log(rows) lnf = np.zeros((rows, cols)) for i in range(rows): for j in range(cols): if x....

    Mathematica 简明教程

    - **举例**:绘制简单的二维函数图像。 - **数据集合的图形**:根据数据集合绘制图形。 - **二维参数作图**:使用参数表示图形。 - **二维图形元素**:包括点、线、面等基本元素。 - **图形的样式** - **图形...

    H3C 7500E 三层策略路由配置实例

    假设有一个简单的局域网环境,包含两台路由器R1和R2以及一台三层交换机S1(即H3C S7500E)。其中,R1和R2分别连接两个不同的ISP,目的是实现基于源IP地址的策略路由选择,以达到负载均衡的目的。 - **R1** 的IP地址...

    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  本插件采用...

Global site tag (gtag.js) - Google Analytics