以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 每个门店统计金额的前30名 (http://foxtable.com/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 [此贴子已经被作者于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.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 销售明细 所以我加了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 [此贴子已经被作者于2018/1/24 17:07:27编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/1/24 17:15:00 -- 嗯嗯,解决那就好。 |