博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用case when 减少表扫描次数
阅读量:4946 次
发布时间:2019-06-11

本文共 1433 字,大约阅读时间需要 4 分钟。

数据库环境:SQL SERVER 2008R2

有网友希望有人帮他优化一下他的SQL,SQL语句如下:

WITH T AS (SELECT B.O_Money MON,B.O_States STATES FROM M_Basket A JOIN M_OrderInfo B ON A.OrderID=B.ID WHERE A.GoodID=@GOODSID),B AS (SELECT  (SELECT SUM(MON) FROM T)SumMoney,(SELECT SUM(MON) FROM T WHERE STATES IN (2,3,4))ComfirmMoney,(SELECT COUNT(*) FROM T WHERE STATES=2)AleadyDrive,(SELECT COUNT(*) FROM T WHERE STATES=3)AleadyPay,(SELECT COUNT(*) FROM T WHERE STATES=4)AleadyComfirm)INSERT @BIAOSELECT * FROM B

看了一下语句,有可能出问题的地方,是with B 里面的内容,T表被访问了4次,

稍微转换一下思路,用case when来改写这段,就可以让T表只访问1次。

改写的SQL如下:

WITH    T AS ( SELECT   B.O_Money MON ,                        B.O_States STATES               FROM     M_Basket A                        JOIN M_OrderInfo B ON A.OrderID = B.ID               WHERE    A.GoodID = @GOODSID             ),        B AS ( SELECT   SUM(MON) AS SumMoney ,                        SUM(CASE WHEN STATES IN ( 2, 3, 4 ) THEN MON                            END) AS ComfirmMoney ,                        COUNT(CASE WHEN STATES = 2 THEN 1                              END) AS AleadyDrive ,                        COUNT(CASE WHEN STATES = 3 THEN 1                              END) AS AleadyPay ,                        COUNT(CASE WHEN STATES = 4 THEN 1                              END) AS AleadyComfirm               FROM     T             )    INSERT  @BIAO            SELECT  *            FROM    B

(本文完)

转载于:https://www.cnblogs.com/boss-he/p/4647956.html

你可能感兴趣的文章
[python]pickle和cPickle
查看>>
剑指Offer--二叉树的镜像
查看>>
PAT-BASIC-1031-查验身份证
查看>>
连连看小游戏
查看>>
(180905)如何通过梯度下降法降低损失----Google机器学习速成课程笔记
查看>>
面试介绍项目经验(转)
查看>>
<metro>Google的验证
查看>>
Oracle 表的分组操作
查看>>
在OS X上的Intllij Idea中配置GlassFish
查看>>
用查表法快速转换yv12到RGB【转】
查看>>
使用公钥登录SSL
查看>>
hdu 1290_献给杭电五十周年校庆的礼物
查看>>
豆瓣电影api
查看>>
BufferedInputStream和FileInputStream的区别
查看>>
likely() 和 unlikely()
查看>>
03一些View总结
查看>>
MapReduce--平均分,最高,低分以及及格率的计算
查看>>
mac下管理论文的工具
查看>>
POJ3122Pie(二分)
查看>>
WF+WCF+WPF第二天--模拟超市收银
查看>>