=================================版权声明=================================
版权声明:原创文章 禁止转载
请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我
勿用于学术性引用。
勿用于商业出版、商业印刷、商业引用以及其他商业用途。
本文不定期修正完善。
本文链接:http://www.cnblogs.com/wlsandwho/p/5141395.html
耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html
=======================================================================
http://www.cnblogs.com/wlsandwho/p/5141395.html
放大图:http://www.cnblogs.com/wlsandwho/p/5141395.html
当准DBA往群里贴问题的时候,我是怀疑的,果然被我猜到了。http://www.cnblogs.com/wlsandwho/p/5141395.html
不管怎样,我相信,每一个我遇到的难题,对我来说都是一次提升的机会。http://www.cnblogs.com/wlsandwho/p/5141395.html
=======================================================================
上代码:http://www.cnblogs.com/wlsandwho/p/5141395.html
1 --by wls 2 --20160119 3 --网络代码有风险 4 --复制粘贴须谨慎 5 USE tempdb 6 GO 7 8 IF OBJECT_ID('t_TestbyWLS','U') IS NOT NULL 9 DROP TABLE t_TestbyWLS 10 GO 11 12 CREATE TABLE t_TestbyWLS(cname NVARCHAR(10),pname NVARCHAR(10),wday INT) 13 GO 14 15 INSERT INTO t_TestbyWLS VALUES 16 ('A','a',1) 17 ,('B','b',1) 18 ,('C','c',1) 19 ,('D','d',2) 20 ,('A','a',2) 21 ,('B','e',2) 22 ,('C','c',3) 23 ,('D','d',4) 24 GO 25 26 WITH TempCP 27 AS 28 ( 29 SELECT cname,pname,cname+pname AS cp,wday FROM t_TestbyWLS 30 ) 31 ,TempVal 32 AS 33 ( 34 SELECT DISTINCT cname,pname,val FROM tempcp AS t CROSS APPLY( SELECT CASE 35 WHEN t.cp=TempCP.cp AND t.wday=1 AND TempCP.wday=2 THEN 2 36 WHEN t.cp=TempCP.cp AND t.wday=1 AND TempCP.wday=3 THEN 3 37 WHEN t.cp=TempCP.cp AND t.wday=1 AND TempCP.wday=4 THEN 4 38 WHEN t.cp=TempCP.cp AND t.wday=2 AND TempCP.wday=4 THEN 3 39 ELSE 1 40 END AS val 41 FROM tempcp) AS a 42 ) 43 SELECT cname,pname,MAX(val) AS val FROM TempVal GROUP BY cname,pname
CROSS APPLY的好处是可以像给函数传参数一样向括号里传筛选条件,实际上MSDN文档中就是自定义了一个函数,我这里直接写了。http://www.cnblogs.com/wlsandwho/p/5141395.html
这样一个显而易见的好处是,可以通过函数封装具体算法来减少代码变化对外部语句的影响。
最大的好处是:它是针对行集的!它针对每一行进行操作!(不负责评论:我觉得恰当使用可以减少游标的出场率)
新合成的那个cp字段没什么用,最终修改修改可以去掉的。
最终修改后的代码:
1 WITH TempVal 2 AS 3 ( 4 SELECT DISTINCT cname,pname,val FROM t_TestbyWLS AS t CROSS APPLY( SELECT CASE 5 WHEN t.cname=t_TestbyWLS.cname AND t.pname=t_TestbyWLS.pname AND t.wday=1 AND t_TestbyWLS.wday=2 THEN 2 6 WHEN t.cname=t_TestbyWLS.cname AND t.pname=t_TestbyWLS.pname AND t.wday=1 AND t_TestbyWLS.wday=3 THEN 3 7 WHEN t.cname=t_TestbyWLS.cname AND t.pname=t_TestbyWLS.pname AND t.wday=1 AND t_TestbyWLS.wday=4 THEN 4 8 WHEN t.cname=t_TestbyWLS.cname AND t.pname=t_TestbyWLS.pname AND t.wday=2 AND t_TestbyWLS.wday=4 THEN 3 9 ELSE 1 10 END AS val 11 FROM t_TestbyWLS) AS a 12 ) 13 SELECT cname,pname,MAX(val) AS val FROM TempVal GROUP BY cname,pname
现在简洁多了。http://www.cnblogs.com/wlsandwho/p/5141395.html
执行计划也很好看?http://www.cnblogs.com/wlsandwho/p/5141395.html
我不会SQL优化,但是执行计划里的嵌套循环应该是有问题的,不然为何会有个叹号。
MSDN手册的描述如下:
快要超出我的SQL知识储备范围了,先去看看书吧。
作为一只C++,混SQL群压力还是蛮大的。http://www.cnblogs.com/wlsandwho/p/5141395.html
非专业SQL 不求高效 但求能跑 http://www.cnblogs.com/wlsandwho/p/5141395.html
=======================================================================
20160125-01 更正 wlsandwho@foxmail.com 王林森 wlsandwho
看了下之前代码的执行计划,循环嵌套那里是有问题的。wlsandwho@foxmail.com 王林森 wlsandwho
略微改了改。wlsandwho@foxmail.com 王林森 wlsandwho
1 WITH TempVal 2 AS 3 ( 4 SELECT DISTINCT cname,pname,val FROM t_TestbyWLS AS t CROSS APPLY( SELECT CASE 5 WHEN t.wday=1 AND t_TestbyWLS.wday=2 THEN 2 6 WHEN t.wday=1 AND t_TestbyWLS.wday=3 THEN 3 7 WHEN t.wday=1 AND t_TestbyWLS.wday=4 THEN 4 8 WHEN t.wday=2 AND t_TestbyWLS.wday=4 THEN 3 9 ELSE 1 10 END AS val 11 FROM t_TestbyWLS 12 WHERE t.cname=t_TestbyWLS.cname AND t.pname=t_TestbyWLS.pname) AS a 13 ) 14 SELECT cname,pname,MAX(val) AS val FROM TempVal GROUP BY cname,pname 15 GO
现在执行计划正常了。wlsandwho
=======================================================================
因为总是有爬虫网站抓取我的博客,无视我的版权,我很伤心,所以文章最后只能这样结尾。
下面开始点名:
Asp.net教程_mvc4_C#_Ado.net_seo_Java_HTML CSS教程
www.tzwhx.com
www.th7.cn
解决方案网
帮客之家 | IT技术 建站编程 电脑教程 www.bkjia.com
软件开发,程序错误,exception
www.java123.net
一键重装系统_打造智能化重装系统软件
www.bitscn.com
http://www.admin85.com/
http://www.3fwork.com/
技术博客-最新最全的技术疑难解决博客
好库文摘 - 技术改变世界
红黑联盟:十三年IT技术门户 精英梦想由此起航 (网络安全,黑客防御,信息安全,编程,系统,网络)
以上都是侵犯我版权的爬虫网站。
=======================================================================
(友情支持请扫描这个)http://www.cnblogs.com/wlsandwho/p/5141395.html
微信扫描上方二维码捐赠
=======================================================================
下面是无耻的爬虫网站网页