T-SQL中apply,存在的理由,为什么要有他?

时间:2022-03-30 18:36:04
/*apply的用法   为什么要用他?感觉还没有关联好用呢*/
--select c.customerid ,COUNT(o.orderid) from Customers c cross apply  Orders o /*outer/cross*/
--where c.city='北京' and c.customerid=o.customerid
--group by  c.customerid
--having COUNT(o.orderid)<3
--order by COUNT(o.orderid) asc

4 个解决方案

#1


cross apply 后面可以直接跟函数这些 

如果是关联的话 就不可以了 

你可以查下一下联机丛书 CORSS APPLY的用法

#2


这个东西好像有点不受欢迎

#3


我也很少用这个,但这个还是有用的。
参考:
http://blog.csdn.net/xrongzhen/article/details/6271370

#4


cross  apply 后面可以跟表值函数


创建自定义表值函数   获取此id教师下的学生列表  
create function getStudent(@tid int)  
returns @tmp table(sid int ,tid int,sName varchar(10))  
as  
begin  
    with cte(sid, tid, sName)  
    as  
    (  
        select sid, tid, sName from Student where tid=@tid  
    )  
    insert into @tmp select * from cte  
    return  
end  
--查询调用  与上面不用表值函数的写法对照一下,会好理解点  
select * from Teacher t cross apply getStudent(t.tid)--在查询中调用表值函数  
--查询结果  
tid         tName      sid         tid         sName  
----------- ---------- ----------- ----------- ----------  
1           li         1           1           zhou  
1           li         2           1           wu  
2           zhang      3           2           zheng  
2           zhang      4           2           wang  
  
(4 行受影响)  

#1


cross apply 后面可以直接跟函数这些 

如果是关联的话 就不可以了 

你可以查下一下联机丛书 CORSS APPLY的用法

#2


这个东西好像有点不受欢迎

#3


我也很少用这个,但这个还是有用的。
参考:
http://blog.csdn.net/xrongzhen/article/details/6271370

#4


cross  apply 后面可以跟表值函数


创建自定义表值函数   获取此id教师下的学生列表  
create function getStudent(@tid int)  
returns @tmp table(sid int ,tid int,sName varchar(10))  
as  
begin  
    with cte(sid, tid, sName)  
    as  
    (  
        select sid, tid, sName from Student where tid=@tid  
    )  
    insert into @tmp select * from cte  
    return  
end  
--查询调用  与上面不用表值函数的写法对照一下,会好理解点  
select * from Teacher t cross apply getStudent(t.tid)--在查询中调用表值函数  
--查询结果  
tid         tName      sid         tid         sName  
----------- ---------- ----------- ----------- ----------  
1           li         1           1           zhou  
1           li         2           1           wu  
2           zhang      3           2           zheng  
2           zhang      4           2           wang  
  
(4 行受影响)