SQL查询语句优化问题 50jamph]

发布时间:2016-12-11 12:19:44 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"SQL查询语句优化问题 50jamph]",主要涉及到SQL查询语句优化问题 50jamph]方面的内容,对于SQL查询语句优化问题 50jamph]感兴趣的同学可以参考一下。

sql语句: select sum(cnt) from( select count(*) as cnt from users a inner join adcp b on dbo.IdcardToCpname(a.idcard) = b.cpname where a.dat>='2009-07-02 00:00:00.000' and a.dat<='2009-07-02 23:59:59.999' group by b.realname,a.serverid having a.serverid =5)regist  select adcp.realname as 合作方,count(*) as 注册个数, cast(cast(count(*)*1.0*100/(select count(*) from users,adcp where dat>='2009-07-02 00:00:00.000' AND dat<='2009-07-02 23:59:59.999' and dbo.IdcardToCpname(users.idcard)=adcp.cpname) as decimal(9,2)) as varchar(50)) +'%' as 所占百分比, dbo.GetRegistByCpname('2009-07-02 00:00:00.000','2009-07-02 23:59:59.999',adcp.cpname,5) as 弹弹堂, dbo.GetRegistByCpname('2009-07-02 00:00:00.000','2009-07-02 23:59:59.999',adcp.cpname,1) as 华山论剑, dbo.GetRegistByCpname('2009-07-02 00:00:00.000','2009-07-02 23:59:59.999',adcp.cpname,0) as 其他                       from users inner join adcp on dbo.IdcardToCpname(users.idcard)=adcp.cpname                      where users.dat>='2009-07-02 00:00:00.000' AND users.dat<='2009-07-02 23:59:59.999' group by adcp.realname,adcp.cpname order by count(*) desc dbo.GetRegistByCpname函数: CREATE FUNCTION dbo.GetRegistByCpname(@startTime datetime,@endTime datetime,@idcardcut varchar(50),@serverid INT) RETURNS int AS BEGIN DECLARE @RESULT int IF @serverid=5 BEGIN SELECT @RESULT =  count(*)  from users  where dat>[email protected] and dat<[email protected]  and dbo.IdcardToCpname(users.idcard) = @idcardcut and [email protected] IF @RESULT = NULL SET @RESULT = 0 END ELSE IF  @serverid=1 BEGIN SELECT @RESULT =  count(*)  from users  where dat>[email protected] and dat<[email protected]  and dbo.IdcardToCpname(users.idcard) = @idcardcut and [email protected] IF @RESULT = NULL SET @RESULT = 0 END ELSE IF  @serverid=0 BEGIN SELECT @RESULT =  count(*)  from users  where dat>[email protected] and dat<[email protected]  and dbo.IdcardToCpname(users.idcard) = @idcardcut and serverid="" IF @RESULT = NULL SET @RESULT = 0 END RETURN @RESULT END dbo.IdcardToCpname函数: CREATE FUNCTION dbo.IdcardToCpname(@idcard VARCHAR(50)) RETURNS varchar(50) AS BEGIN DECLARE @RESULT varchar(50) IF CharIndex('|',@idcard)>0            BEGIN SET @RESULT=Substring(@idcard,1,CharIndex('|',@idcard)-1) END ELSE                              BEGIN       SET @[email protected] END RETURN @RESULT END   执行花了几分钟 -.-!

不好意思,第一条select语句没用的

不明白你要干什么

调用多次函数能不慢吗...

能不用函数的话尽量不要用函数

引用 2 楼 feixianxxx 的回复:不明白你要干什么 同感!

不知道case when 是否能满足你的需求。

有道理 

上一篇:我想买本书哪本更好(看过的推荐下,没看过的不要害我啊) 50huiyaxiong]
下一篇:SQLServer代理作业问题 0nxfdownload]

相关文章

相关评论