none
SQL SELECT语句去重加计算 RRS feed

  • 问题

  • 新手疑惑
    我有个类似这样的表
    店铺    销售员   业绩   占店铺百分比   地区
    1        a           20       10%            bj
    1        b           30       15%            bj 
    2        a           40       10%            bj
    2        b           50       12.5%         bj
    3        c           20        20%           bj

    4        a           40       13.3%         fj
    5        b           50       16.7%         fj
    5        b           20        10%           fj

    现在我要取出如下表
        销售员   业绩   占地区百分比           地区    
          a         60      8.57%(60/700)    bj
          b         100    14.28%                bj
          a         40      10%                     fj
          b         100    17.5%                  fj

    那个百分比怎么算,
    就是说要先算出地区总的,在算百分比。
    急求高手帮忙!!!!!!!!!!!!!!!
    我想写个存储过程!!!


    • 已编辑 yazi308308 2009年11月26日 4:35
    • 已移动 Sheng Jiang 蒋晟 2009年11月26日 16:10 SQL语法问题 (发件人:ADO.NET 与 LINQ)
    2009年11月25日 14:11

答案

  • use Tempdb
    go
    --> -->
     
    declare @T table([店铺] int,[销售员] nvarchar(1),[业绩] int,[占店铺百分比] decimal(10,4),[地区] nvarchar(2))
    Insert @T
    select 1,N'a',20,0.10,N'bj' union all
    select 1,N'b',30,0.15,N'bj' union all
    select 2,N'a',40,0.10,N'bj' union all
    select 2,N'b',50,0.125,N'bj' union all
    select 3,N'c',20,0.20,N'bj' union all
    select 4,N'a',40,0.133,N'fj' union all
    select 5,N'b',50,0.167,N'fj' union all
    select 5,N'b',20,0.10,N'fj'
     
    
    
    
    SELECT B.[地区],B.[销售员],sum(B.业绩) as 业绩,rtrim(cast(sum(B.业绩)/a.业绩*100 as numeric(18,2)))+'%' as 占地区百分比
    from
    (select [地区],SUM(业绩) AS 业绩
    FROM
        (Select [地区],[业绩]/[占店铺百分比] as 业绩      from @T t      where [销售员]=(select top 1 [销售员] from @T where [地区]=t.[地区] and [店铺]=t.[店铺]))A
    group by [地区])A,@T B
    WHERE A.[地区]=B.[地区]
    GROUP BY B.[地区],B.[销售员],a.业绩
    
    地区   销售员  业绩          占地区百分比
    ---- ---- ----------- ------------------------------------------
    bj   a    60          8.57%
    bj   b    80          11.43%
    bj   c    20          2.86%
    fj   a    40          5.00%
    fj   b    70          8.75%
    
    (5 個資料列受到影響)
    



    ROY WU(吳熹 )
    2009年11月27日 9:11
    版主

全部回复

  • SELECT A.*,B.* FROM (SELECT  地区 , 销售员,SUM(业绩) FROM 表 GROUP BY 地区 , 销售员) AS A LEFT JOIN
    (SELECT  地区,SUM(业绩) FROM 表 GROUP BY 地区) AS B ON A.地区=B.地区
    2009年11月25日 14:22
  • 不是我想要的!!
    要是我有好多地区呢,
    2009年11月25日 15:10
  •  a         50      7.14%(50/700)    bj

    50 和 70 是怎么来的?

    知识改变命运,奋斗成就人生!
    2009年11月26日 2:46
  •  a         50      7.14%(50/700)    bj

    50 和 70 是怎么来的?

    知识改变命运,奋斗成就人生!
    弄错了,已改过了,700是地区总和,30/10%+50/12.5%+20/20%=700
    2009年11月26日 4:37
  • 1        a           20       10%            bj
    1        b           30       15%            bj 
    2        a           40       10%            bj
    2        b           50       12.5%         bj
    3        c           20        20%           bj

    30/10%+50/12.5%+20/20%=700

    你这些记录也不对吧。

    知识改变命运,奋斗成就人生!
    2009年11月26日 4:51
  • 1        a           20       10%            bj
    1        b           30       15%            bj 
    2        a           40       10%            bj
    2        b           50       12.5%         bj
    3        c           20        20%           bj

    30/10%+50/12.5%+20/20%=700

    你这些记录也不对吧。

    知识改变命运,奋斗成就人生!
    又弄错了,30/15%+50/12.5%+20/20%
    2009年11月26日 9:53
  • 又弄错了,30/15%+50/12.5%+20/20%
    ----------------------------
    是什麼規則


    ROY WU(吳熹 )
    2009年11月27日 1:49
    版主
  • 又弄错了,30/15%+50/12.5%+20/20%
    ----------------------------
    是什麼規則


    ROY WU(吳熹 )
    算出地区中所以店的总和,然后把地区总和加起来
    2009年11月27日 4:14
  • 楼主,您好,
    个人建议您开个新贴,把您的问题描述清晰,不要再犯错了。

    2009年11月27日 5:20
    版主
  • 这样计算:
     
    select x.*, (x.业绩/y.地区业绩) as 占地区百分比 from
    (select 销售员,sum(业绩) as 业绩,地区 from 业绩表 group by 销售员,地区) x
    left join 
    (select sum(业绩) as 地区业绩,地区 from 业绩表 group by 地区) y
    on x.地区=y.地区

    ****** 
      注意要考虑地区业绩为0的时候 要报错
    *************
    你可以写个函数  考虑为0的直接赋0
    或者是 用select case 如下:
      case    地区业绩 when  0 then  0 end  else   (x.业绩/y.地区业绩) end

    2009年11月27日 8:31
  • use Tempdb
    go
    --> -->
     
    declare @T table([店铺] int,[销售员] nvarchar(1),[业绩] int,[占店铺百分比] decimal(10,4),[地区] nvarchar(2))
    Insert @T
    select 1,N'a',20,0.10,N'bj' union all
    select 1,N'b',30,0.15,N'bj' union all
    select 2,N'a',40,0.10,N'bj' union all
    select 2,N'b',50,0.125,N'bj' union all
    select 3,N'c',20,0.20,N'bj' union all
    select 4,N'a',40,0.133,N'fj' union all
    select 5,N'b',50,0.167,N'fj' union all
    select 5,N'b',20,0.10,N'fj'
     
    
    
    
    SELECT B.[地区],B.[销售员],sum(B.业绩) as 业绩,rtrim(cast(sum(B.业绩)/a.业绩*100 as numeric(18,2)))+'%' as 占地区百分比
    from
    (select [地区],SUM(业绩) AS 业绩
    FROM
        (Select [地区],[业绩]/[占店铺百分比] as 业绩      from @T t      where [销售员]=(select top 1 [销售员] from @T where [地区]=t.[地区] and [店铺]=t.[店铺]))A
    group by [地区])A,@T B
    WHERE A.[地区]=B.[地区]
    GROUP BY B.[地区],B.[销售员],a.业绩
    
    地区   销售员  业绩          占地区百分比
    ---- ---- ----------- ------------------------------------------
    bj   a    60          8.57%
    bj   b    80          11.43%
    bj   c    20          2.86%
    fj   a    40          5.00%
    fj   b    70          8.75%
    
    (5 個資料列受到影響)
    



    ROY WU(吳熹 )
    2009年11月27日 9:11
    版主
  • 新手疑惑,高手也疑惑,規則看不懂!!
    • 已建议为答案 SQL STUDIO 2009年11月28日 17:26
    2009年11月28日 17:26