T-SQL中apply,存在的理由,为啥要有他
T-SQL中apply,存在的理由,为什么要有他?
/*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
------解决方案--------------------
cross apply 后面可以直接跟函数这些
如果是关联的话 就不可以了
你可以查下一下联机丛书 CORSS APPLY的用法
------解决方案--------------------
我也很少用这个,但这个还是有用的。
参考:
http://blog.****.net/xrongzhen/article/details/6271370
------解决方案--------------------
cross apply 后面可以跟表值函数
/*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
------解决方案--------------------
cross apply 后面可以直接跟函数这些
如果是关联的话 就不可以了
你可以查下一下联机丛书 CORSS APPLY的用法
------解决方案--------------------
我也很少用这个,但这个还是有用的。
参考:
http://blog.****.net/xrongzhen/article/details/6271370
------解决方案--------------------
cross apply 后面可以跟表值函数
- SQL code
创建自定义表值函数 获取此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 行受影响)