Foxtable(狐表)用户栏目专家坐堂 → sql同比、环比代码放在一起。。。


  共有3897人关注过本帖树形打印复制链接

主题:sql同比、环比代码放在一起。。。

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
sql同比、环比代码放在一起。。。  发帖心情 Post By:2014/8/17 10:19:00 [只看该作者]

哈,甜老师这么早呢!!

 

甜老师,我用sql语句写同比、环比统计,分别写会了,但是要放在一起却不知道怎么放:

 

环比:

select c.消费门店 as 消费门店, convert(varchar(10), c.消费时间, 23) as 消费时间, c.销售金额 as 销售金额, case when d.销售金额 is null or d.销售金额=0 then '无穷大' else cast(cast((isnull(c.销售金额, 0)-isnull(d.销售金额,0))*100/isnull(d.销售金额, 0) as decimal(10,2)) as varchar(50))+'%' end as 环比增长 from 门店日销售 c left join
 (select a.消费门店 as 消费门店, a.销售金额 as 销售金额, a.消费时间 as ls消费时间, b.消费时间 as 消费时间 from 门店日销售 a join 门店日销售 b on a.消费时间=DateAdd(month, -1, b.消费时间) and a.消费门店=b.消费门店) d
 on c.消费时间=d.消费时间 and c.消费门店=d.消费门店

 

同比:

select c.消费门店 as 消费门店, convert(varchar(10), c.消费时间, 23) as 消费时间, c.销售金额 as 销售金额, case when d.销售金额 is null or d.销售金额=0 then '无穷大' else cast(cast((isnull(c.销售金额, 0)-isnull(d.销售金额,0))*100/isnull(d.销售金额, 0) as decimal(10,2)) as varchar(50))+'%' end as 同比增长 from 门店日销售 c left join
 (select a.消费门店 as 消费门店, a.销售金额 as 销售金额, a.消费时间 as ls消费时间, b.消费时间 as 消费时间 from 门店日销售 a join 门店日销售 b on a.消费时间=DateAdd(year, -1, b.消费时间) and a.消费门店=b.消费门店) d
 on c.消费时间=d.消费时间 and c.消费门店=d.消费门店

 

现在是分别两张视图,想像狐表的统计放在一张里:

如字段:

消费时间  消费门店  销售金额 环比  同比

 

搞半天没搞出来。。。

 

[此贴子已经被作者于2014-8-17 10:20:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/17 10:24:00 [只看该作者]

 select * from 环比视图 a inner join 同比视图 b on a.消费门店 = b.消费门店

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/8/17 10:36:00 [只看该作者]

哦,您是用这两个表联合查询,出现了这个问题:


图片点击可在新窗口打开查看此主题相关图片如下:多次指定列名.png
图片点击可在新窗口打开查看

能不能直接在一张视图里搞定呢?不用再第三张来联合查询。。。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/17 10:38:00 [只看该作者]

 把视图的名称,替换成对应的语句,即可。慢慢改

 

select a.*, b.同比增长 from 环比视图 a inner join 同比视图 b on a.消费门店 = b.消费门店


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/8/17 12:11:00 [只看该作者]

谢谢甜老师,搞定!!

就是要用三张视图。。。


图片点击可在新窗口打开查看此主题相关图片如下:同比环比分析.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/8/17 14:10:00 [只看该作者]

在一张视图里搞定:

SELECT
c.[注册单位],
c.[消费门店] AS [消费门店],
convert(varchar(10), c.消费时间, 23) AS [消费时间],
c.[销售金额] AS [今天销售金额],
d.销售金额 AS [昨天销售金额],
e.[销售金额] AS[上年今天销售金额],
case when d.销售金额 is null or d.销售金额=0 then '无对比数据' else cast(cast((isnull(c.销售金额, 0)-isnull(d.销售金额,0))*100/isnull(d.销售金额, 0) as decimal(10,2)) as varchar(50))+'%' end AS [环比增长],
case when e.销售金额 is null or e.销售金额=0 then '无对比数据' else cast(cast((isnull(c.销售金额, 0)-isnull(e.销售金额,0))*100/isnull(e.销售金额, 0) as decimal(10,2)) as varchar(50))+'%' end AS [同比增长]
FROM
dbo.[门店日销售] AS c
LEFT JOIN (select a.消费门店 as 消费门店, a.销售金额 as 销售金额, a.消费时间 as ls消费时间, b.消费时间 as 消费时间 from 门店日销售 a join 门店日销售 b on a.消费时间=DateAdd(DAY, -1, b.消费时间) and a.消费门店=b.消费门店) AS d ON  c.[消费时间]= d.[消费时间] and c.[消费门店] = d.消费门店
LEFT JOIN (select f.消费门店 as 消费门店, f.销售金额 as 销售金额, f.消费时间 as ls消费时间, g.消费时间 as 消费时间 from 门店日销售 f join 门店日销售 g on f.消费时间=DateAdd(year, -1, g.消费时间) and f.消费门店=g.消费门店) AS e ON d.[消费时间]= e.[消费时间] and d.[消费门店] = e.消费门店
WHERE
c.[注册单位] = 'rjsyt' and c.[消费门店] = '6号店'


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/17 14:15:00 [只看该作者]

 用三张比较好,这样是方便管理和方便语句编写的。

 

 如果要用一张的话,你就把两张视图的代码拷贝,替换视图的名称即可。


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/8/17 17:15:00 [只看该作者]

哦,甜老师,如果数据量大的话,是用一张好还是用三张好呢?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/17 17:16:00 [只看该作者]

以下是引用fubblyc在2014-8-17 17:15:00的发言:
哦,甜老师,如果数据量大的话,是用一张好还是用三张好呢?

 

一样的,最后都是合并成一条sql语句去查询的。


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/8/17 17:19:00 [只看该作者]

好的,谢谢甜老师。

他们说数据量在数十万、数百万级的时候最好弄 存储过程 。数据表还要分表。

 

到时候再弄吧。。。先这样写着。。


 回到顶部