请求大神优化SQL语句

loveshrimp423 2012-07-07 11:33:35

select
convert(varchar(100),tmp.Dcrq,102) Dcrq,tmp.[name],tmp.userno,tmp.zc,tmp.wuc,tmp.wanc,tmp.yec,tmp.zc_sk,tmp.wuc_sk,tmp.wanc_sk,tmp.yec_sk,tmp.zc_s,tmp.wuc_s,tmp.wanc_s,tmp.yec_s,tmp.ExceptionCount,

(case when isnull(ExceptionCount,0)=0 then 0 else isnull(ExceptionCount,0)*10-10 end) 'ActionMoney'
--into #temp
from(select temp.Dcrq,temp.[name],temp.userno,temp.zc,temp.wuc,temp.wanc,temp.yec,temp.zc_sk,temp.wuc_sk,temp.wanc_sk,temp.yec_sk,
case when temp.zc= temp.zc_sk then '正常' else '<strong><span style=''background:black;color:#009900;''>异常</span></strong>' end 'zc_s',
case when temp.wuc= temp.wuc_sk then '正常' else '<strong><span style=''background:black;color:#009900;''>异常</span></strong>' end 'wuc_s',
case when temp.wanc= temp.wanc_sk then '正常' else '<strong><span style=''background:black;color:#009900;''>异常</span></strong>' end 'wanc_s',
case when temp.yec= temp.yec_sk then '正常' else '<strong><span style=''background:black;color:#009900;''>异常</span></strong>' end 'yec_s',
cai.dbo.GetUserExceptionCount(temp.UserNo,@a) 'ExceptionCount'



from(

select
dc.Dcrq,
(select distinct [name] from cai.dbo.[user] u where u.UserNo=dc.Userno)'name',
dc.UserNo,
zc,
wuc,
wanc,
yec,
case zc_sk when 0 then 1 else 0 end 'zc_sk',
case wuc_sk when 0 then 1 else 0 end 'wuc_sk',
case wanc_sk when 0 then 1 else 0 end 'wanc_sk',
case yec_sk when 0 then 1 else 0 end 'yec_sk'
from cai.dbo.dican dc left join
(
select
tt.UserNo,
--(select [name] from cai.dbo.[user] u where u.UserNo=tt.Userno)'name',
sum(tt.zc_sk) 'zc_sk',
sum(tt.wuc_sk) 'wuc_sk',
sum(tt.wanc_sk) 'wanc_sk',
sum(tt.yec_sk) 'yec_sk'
from
(
select
t.UserNo,
case t.sd when 0 then 0 end 'zc_sk',
case t.sd when 1 then 0 end 'wuc_sk',
case t.sd when 2 then 0 end 'wanc_sk',
case t.sd when 3 then 0 end 'yec_sk'
from
(
select
Dcrq,
UserNo ,
zc ,
wuc ,
wanc ,
yec,
sd
from cai.dbo.dican dc
left join
carddb5.dbo.readtable rt on rt.lb=2 and dc.UserNo = rt.e_bh and DATEDIFF(d, (case when sd<3 then dc.Dcrq else DATEADD(d,+1,dcrq) end) , rt.dtime)=0 where rt.lb=2 and datediff(d, dc.Dcrq,@a)=0

)t group by t.Dcrq,t.UserNo,t.sd

)tt group by tt.UserNo

)ttt on dc.UserNo = ttt.UserNo where DATEDIFF(d,dc.dcrq,@a)=0

union all

select
GETDATE() 'Dcrq',
isnull((select distinct name from cai.dbo.[user] u where u.userno=e_bh),'临时卡')'name',
t.e_bh,
0 'zc',
0 'wuc',
0 'wanc',
0 'yec',
sum(t.zc_sk) 'zc_sk',
sum(t.wuc_sk) 'wuc_sk',
sum(t.wanc_sk) 'wanc_sk',
sum(t.yec_sk) 'yec_sk'
from(
select
e_bh,
case sd when 0 then 1 else 0 end 'zc_sk',
case sd when 1 then 1 else 0 end 'wuc_sk',
case sd when 2 then 1 else 0 end 'wanc_sk',
case sd when 3 then 1 else 0 end 'yec_sk'
from carddb5.dbo.readtable rt where DATEDIFF(d,dtime,@a)=0 and rt.lb=2
and not exists(select dc.id,dc.userno,dc.dcrq,dc.zc,dc.wuc,dc.wanc,dc.yec,dc.xy from cai.dbo.dican dc where dc.UserNo = rt.e_bh and DATEDIFF(d,Dcrq,@a)=0 and rt.lb=2) --and sd <3
group by e_bh,sd
)t group by t.e_bh

)temp)tmp where tmp.userno not in('1585','1396','1215','1606','1498','155','156','157','159','160','152','153','158','151','160','1620','1679','1696','1695') order by tmp.UserNo asc

...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveshrimp423 2012-07-10
  • 打赏
  • 举报
回复
因为一卡通是现成的东西,数据库结构不理想,在此基础上做了一个订餐系统,还有对比订跟刷之前的数据,数据来源全部用子查询和联接动态生成的。占用资源太大了,月底出报表的时候,日报表还好,数据不多
loveshrimp423 2012-07-10
  • 打赏
  • 举报
回复
索引有加,不然查询更久。现在的解决方法是把无效数据清掉,只留着一两个月,之前是从去年到现在的数据,现在速度好多了,不过就要定期清理一下,把过期的数据去掉
發糞塗牆 2012-07-08
  • 打赏
  • 举报
回复
首先,你的大量嵌套和大量case when必然影响性能。先检查一下你的设计是否过于繁杂。
然后,尝试优化索引,甚至分区,如果数据量很大,可以按天或者按周来分区。
再者,看看是否有重复扫描同一个表的部分,把它合起来。
还有,万不得已的情况下可以考虑空间换时间,比如把一些仅仅是用来查的数据先整合到一个表。甚至计算好,然后你再在这个基础上组合数据,这样资源耗用就少很多。
楠_ 2012-07-07
  • 打赏
  • 举报
回复
像这样的数据不要这样用,子查询层太多会影响效率的。用存储过程,把数据存储再 临时表中,再 外联 这几个临时表,就好了,最好把你的表创建几个 合适的索引。增加查询速度。
loveshrimp423 2012-07-07
  • 打赏
  • 举报
回复
请问具体怎么弄,不是很理解
人生无悔 2012-07-07
  • 打赏
  • 举报
回复
不用这么多联合查询,子查询之类的
用临时表取主要数据,不存在的字段先用对应的类型替代
然后用数据库数据更新临时表中这些未取出的字段
最后从临时表中取出就好了
loveshrimp423 2012-07-07
  • 打赏
  • 举报
回复
这个是自动把订餐数据跟刷卡数据作对比生成异常结果报表的查询,月底量一多的时候查询超慢,经常造成连接超时,大家看看能不能怎么优化一下

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧