以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  每个门店统计金额的前30名  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=113873)

--  作者:fubblyc
--  发布时间:2018/1/24 14:35:00
--  每个门店统计金额的前30名
老师,想要每个门店前30个会员的统计金额,比如有2个店,那就应该有2个30,就是60行。我现在是不管多少店,都只有30行
我如下做的是所有门店的前30名会员的统计金额

要怎么写呢?

SELEC T top 30
dbo.[销售明细].[门店],
dbo.[销售明细].[会员卡号],
sum(dbo.[销售明细].[销售金额]) as 金额

FROM
dbo.[销售明细]
WHERE
dbo.[销售明细].会员卡号 <> \'\' 
GROUP BY
dbo.[销售明细].[会员卡号],
dbo.[销售明细].[门店]
ORDER BY
[金额] DESC


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180124143144.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/1/24 15:10:56编辑过]

--  作者:fubblyc
--  发布时间:2018/1/24 15:24:00
--  
或者用 SQLGroupTableBuilder  要怎么写呢。。。


    Dim b1 As New SQLGroupTableBuilder("统计表1","销售明细")

    Dim dt1 As fxDataSource

    b1.C    

b1.Groups.AddDef("门店"

b1.Groups.AddDef("会员卡号"
b1
.Totals.AddDef("销售金额","金额")

        b1.CommandTimeOut = 600

        dt1 = b1.BuildDataSource()




--  作者:有点甜
--  发布时间:2018/1/24 16:00:00
--  

参考

 

https://www.cnblogs.com/netserver/p/4518995.html

 


--  作者:有点甜
--  发布时间:2018/1/24 16:03:00
--  

这种效率好一些

 

https://www.cnblogs.com/isun/archive/2012/12/22/2829528.html

 


--  作者:有点甜
--  发布时间:2018/1/24 16:04:00
--  

实例,参考 http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=99778&authorid=0&page=0&star=1

 


--  作者:fubblyc
--  发布时间:2018/1/24 17:00:00
--  
解决了。原来是我多了会员卡号的分组。那自然都是1了。

恩恩,谢谢甜老师。
我这样写可以出来明细的排名,但是我要先按门店和卡号分组统计求和后再排名:
SELEC T 门店,会员卡号,销售金额,ROW_NUMBER() over(partition by 门店,会员卡号 order by 销售金额 desc) as rowNum
from 销售明细

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180124165405.png
图片点击可在新窗口打开查看

所以我加了sum函数,却没有排名了:
SELEC T *,ROW_NUMBER() over(partition by a.门店,a.会员卡号 order by a.金额 desc) as rowNum from 
(
SELEC T 门店,会员卡号,sum(销售金额) as 金额 from 销售明细 GROUP BY 销售明细.门店,销售明细.会员卡号 
) as a

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20180124170049.png
图片点击可在新窗口打开查看



[此贴子已经被作者于2018/1/24 17:07:27编辑过]

--  作者:有点甜
--  发布时间:2018/1/24 17:15:00
--  

嗯嗯,解决那就好。