发布于 1970-1-1 08:00
完善问题
1min目标场景问卷 立即参与
自己解决了
悬赏: F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共回答
最佳回答
0
乔治在上海Lv2见习互助
发布于2022-7-21 13:38

已解决

最佳回答
1
CD20160914Lv8专家互助
发布于2022-7-18 14:47

再套一层子查询

select top 15 * from (原来的sql)

最佳回答
1
yzm339714Lv6中级互助
发布于2022-7-18 14:51

是要每年的前15  还是 总共的前 15?

  • 乔治在上海 乔治在上海 总共的前15,取所有产品所有年份数量的总和最多的前15条
    2022-07-18 14:56 
  • yzm339714 yzm339714 回复 乔治在上海 哦哦,那就把年份从分组字段去掉,只按产品分组,然后按数量排序,或者 select top 15 xh,sum(数量) 数量 from (原来的sql) x group by xh order by 数量
    2022-07-18 15:17 
  • 乔治在上海 乔治在上海 回复 yzm339714 先去掉的话后面嵌套中再加上年份分组吗
    2022-07-18 15:24 
  • yzm339714 yzm339714 回复 乔治在上海 你要总共的前15就不要年份分组了啊,难道说你是要先找总共的前15个产品,然后看这些产品每年的数量?
    2022-07-18 15:27 
  • 乔治在上海 乔治在上海 回复 yzm339714 不是,是每个产品所有年份的总量来进行排序,这个总量只是用来排序的,然后再显示每年对应的产品数据,年份分组还是要的
    2022-07-18 15:31 
最佳回答
1
Z4u3z1Lv6专家互助
发布于2022-7-18 14:52(编辑于 2022-7-18 15:55)

现在的sql中select 后加  row_number() over () 生成一个序号,

然后select  * from (加序号后的sql) where 序号<=15

-------------------------

select aa.* from (

select  xh,大类,sum(数量) as  数量,sum(净销售)  as  净销售,ccusheadcode,row_number() over(partition by xh,大类,ccusheadcode order  by sum(数量) desc,sum(净销售) desc) [i] from 

(select CASE when isnull(e.xh,'')='' THEN '106' ELSE e.xh END  xh ,

 CASE when isnull(e.xh,'')='' THEN '其它品种' ELSE d.largeclassname END  大类 ,

 c.year_bi,SUM(ISNULL(c.inatsum_bi,0)-isnull(c.thinatsum_bi,0))*b.prop_ywy/10000 AS 净销售,

 sum(c.iquantity_bi-c.thiquantity_bi)*b.prop_ywy as 数量,f.ccusheadcode

 from BI_sale_area_part a

 left join BI_cus_ywy b on a.market=b.market

 left join BI_customer f on b.ccusheadcode=f.ccusheadcode

 left join BI_sale_cinvcode_day c on b.ccusheadcode=c.ccusheadcode

 left join  BI_InventoryNew d on c.cinvcode_bi=d.cinvcode 

 left join BI_InventorySort e on d.largeClassName=e.InventoryName

  WHERE   f.ccusheadcode= '000001'

 GROUP BY  d.largeclassname,c.year_bi, e.xh,b.prop_ywy,f.ccusheadcode

 order by 数量 desc

 ) aa  

 group by 大类,xh,ccusheadcode

 ) t 

 inner join 

 (select CASE when isnull(e.xh,'')='' THEN '106' ELSE e.xh END  xh ,

 CASE when isnull(e.xh,'')='' THEN '其它品种' ELSE d.largeclassname END  大类 ,

 c.year_bi,SUM(ISNULL(c.inatsum_bi,0)-isnull(c.thinatsum_bi,0))*b.prop_ywy/10000 AS 净销售,

 sum(c.iquantity_bi-c.thiquantity_bi)*b.prop_ywy as 数量,f.ccusheadcode

 from BI_sale_area_part a

 left join BI_cus_ywy b on a.market=b.market

 left join BI_customer f on b.ccusheadcode=f.ccusheadcode

 left join BI_sale_cinvcode_day c on b.ccusheadcode=c.ccusheadcode

 left join  BI_InventoryNew d on c.cinvcode_bi=d.cinvcode 

 left join BI_InventorySort e on d.largeClassName=e.InventoryName

  WHERE   f.ccusheadcode= '000001'

 GROUP BY  d.largeclassname,c.year_bi, e.xh,b.prop_ywy,f.ccusheadcode

 order by 数量 desc

 ) aa  on t.大类=aa.大类 and t.xh=aa.xh and t.ccusheadcode=aa.ccusheadcode

 where t.i<=15

  • Z4u3z1 Z4u3z1 回复 乔治在上海 你不是要总和最多的么?你这样描述需求前后不一样了啊
    2022-07-18 15:02 
  • Z4u3z1 Z4u3z1 回复 乔治在上海 你是不是想要按产品、年份分组后,组内的前15.举个例子3个产品2年显示结果就是3*2*15=90条数据??
    2022-07-18 15:08 
  • 乔治在上海 乔治在上海 回复 Z4u3z1 不不不,我可能描述的不清楚,是先按照年份分组,比如一共有20个产品,取每个产品所有年份销售的数量总和,比如22年数量为3, 21年数量为5,那么数量就是8,按这个数量来排序取15条
    2022-07-18 15:14 
  • 乔治在上海 乔治在上海 回复 Z4u3z1 还有个问题比如我刚刚描述的,产品1的22年数量为3就是一条数据,21年数量为5又是一条数据,如果这种情况直接top2相当于还是显示一条数据,因为产品1的名称相同进行了分组
    2022-07-18 15:17 
  • Z4u3z1 Z4u3z1 回复 乔治在上海 取统计区间内产品总量的前15后再根据这15个产品返回统计区间的相关数据?
    2022-07-18 15:20 
  • 2关注人数
  • 417浏览人数
  • 最后回答于:1970-1-1 08:00
    请选择关闭问题的原因
    确定 取消
    返回顶部