• SQLSERVER 之APPLY用法


    首先 APPLY 分为 OUTER APPLY 和CROSS APPLY

    使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。

    APPLY 有两种形式: CROSS APPLY 和 OUTER APPLY。CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。

    例一:

    现在有一个订单表和一个客户表

    CREATE TABLE USERS(
    USERID INT  PRIMARY KEY IDENTITY(1000,1),
    USERNAME VARCHAR(10) NULL,
    USERSEX BIT NULL
    )
    CREATE TABLE USERSORDER(
    ORDERSID INT  PRIMARY KEY IDENTITY(1,1),
    ORDERNAME VARCHAR(100) NULL,
    ORDERCOMMIT VARCHAR(1000),
    USERORDERID INT,
    ORDERMONEY MONEY
    )
    
    SELECT * FROM USERS
    SELECT * FROM USERSORDER
    INSERT INTO USERS VALUES('小明',0),('毛阿敏',1),('李白',0),('程普',0)
    INSERT INTO USERSORDER VALUES('伊斯兰狗*1','乖巧可爱',1000,7000),('加菲猫','乖巧可爱',1002,10000),('九尾狐狸*1','乖巧可爱',1000,5000),('小鸟依人','乖巧可爱',1000,9000),('啧啧啧*1','哒哒哒',1001,9000)

    使用 OUTER APPLY试验

    SELECT * FROM USERS A OUTER APPLY(SELECT * FROM USERSORDER U WHERE A.USERID=U.USERORDERID)AS Q

     

    使用 CROSS APPLY试验

    SELECT * FROM USERS A CROSS APPLY(SELECT * FROM USERSORDER U WHERE A.USERID=U.USERORDERID)AS Q

     

     例二:

    -- 创建test表
     create   table  test(oid  int ,name  char ( 20 ),lead  char ( 10 ))
    
     -- 往里面插入几行数据
     insert   into  test  values ( 1 , ' 测试公司 ' , ' 11 ' )
     insert   into  test  values ( 1 , ' 测试公司 ' , ' 12 ' )
     insert   into  test  values ( 1 , ' 测试公司 ' , ' 13 ' )
     insert   into  test  values ( 1 , ' 测试公司 ' , ' 14,15,16 ' )
    
    
     -- 拆分字符串函数
     alter   function  select_Dempart_Manager
    (
     @oid   int ,
     @lead   char ( 10 )
    )
     returns   @temp   table (oid  int ,lead  char ( 10 ))
     as
     begin
        while   charindex ( ' , ' , @lead ) > 1
          begin
            insert   into   @temp   values ( @oid , left ( @lead , charindex ( ' , ' , @lead ) - 1 ))
            set   @lead = stuff ( @lead , 1 , charindex ( ' , ' , @lead ), '' )
          end
        insert   into   @temp   values ( @oid , @lead )   
     return
     end
    
     -- 使用apply函数调用
     select  a.oid,name,ST.lead  from  test a
     outer  apply select_Dempart_Manager(a.oid,a.lead)  as  ST
    
     -- 结果
    -- oid name                    lead
    -- 1    测试公司               11        
    -- 1    测试公司               12        
    -- 1    测试公司               13        
    -- 1    测试公司               14        
    -- 1    测试公司               15        
    -- 1    测试公司               16        

    参考:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms175156(v=sql.105)

  • 相关阅读:
    scikitlearn中predict_proba用法 (与predict的区别)
    Sklearn,TensorFlow,keras模型保存与读取
    TensorFlow GPU 的使用
    Keras2.2 predict和fit_generator的区别
    wordcloud词云可视化
    使用scp命令,远程上传下载文件/文件夹
    L0/L1/L2范数的联系与区别
    Python中的正斜杠/与反斜杠\
    在Keras中使用tensorboard可视化acc等曲线
    Linux终端没有GUI,使用matplotlib绘图
  • 原文地址:https://www.cnblogs.com/superfeeling/p/15605996.html
Copyright © 2020-2023  润新知