sql 有优化或简写吗

MrYangkang 2014-03-04 06:04:14
--计算本年的个数量,金额
select a.wlcode,a.sumqty1-b.sumqty2

select wlcode,oyear
,sum(qty1)sumqty1,sum(qty2)sumqty2
,sum(money1)summoney1,sum(money2) as summoney2 from table1
where oyear ='2013'
group by wlcode,oyear
)a inner join
(
--因为一个条件不同,我就的写两次
select wlcode,oyear
,sum(qty1)sumqty1,sum(qty2)sumqty2
,sum(money1)summoney1,sum(money2) as summoney2 from table1
where oyear ='2012'
group by wlcode,oyear
)b a.wlcode = b.wlcode
...全文
384 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-03-05
  • 打赏
  • 举报
回复
首先确保数据正确,性能问题晚点再处理,可以贴执行计划
MrYangkang 2014-03-05
  • 打赏
  • 举报
回复
,先这样处理呗!!!
  • 打赏
  • 举报
回复
也可以做简化。 select a.wlcode,a.sumqty1-b.sumqty2 可以这样:
SELECT  wlcode ,
        SUM(CASE WHEN oyear='2013' THEN qty1 ELSE 0 END ) - SUM(CASE WHEN oyear='2012' THEN qty2 ELSE 0 END )
FROM    table1
WHERE   oyear IN ( '2013', '2012' )
GROUP BY wlcode
  • 打赏
  • 举报
回复
其实你这种写法,看上去好像写的挺多的,但是性能上应该没什么问题的。 要优化,可以考虑在oyear,wlcode 字段上建立索引
發糞塗牆 2014-03-04
  • 打赏
  • 举报
回复
貌似可以用apply,不过我不熟
發糞塗牆 2014-03-04
  • 打赏
  • 举报
回复
这个看看结果有没有问题
SELECT wlcode,SUM(CASE WHEN oyear='2013' THEN sumqty1 ELSE 0 END )-SUM(CASE WHEN oyear='2012' THEN sumqty1 ELSE 0 END )
FROM (
SELECT  wlcode ,
        oyear ,
        SUM(qty1) sumqty1 ,
        SUM(qty2) sumqty2 ,
        SUM(money1) summoney1 ,
        SUM(money2) AS summoney2
FROM    table1
WHERE   oyear IN ( '2013', '2012' )
GROUP BY wlcode ,
        oyear)a
GROUP BY wlcode
        
發糞塗牆 2014-03-04
  • 打赏
  • 举报
回复
2005以上可以先用CTE把相同的数据存一起

27,579

社区成员

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

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