T1表
编号      总金额     批发价        利润
1001     10     8          1
1002      31     20          5
1003      59     50          20
.....
结果总次数  总利润  总批发价  10元内总和         11-30元内总和          31-50元内总和        50元以上总和
3         26        78         50                 40元                      10元                0说明
分段是以达到这个段的金额合计为结果比如参照我上面的分段。31元这个数字,在10元内总和 这个段里就占10元,然后在11-30元内总和 这个段里占20元,在31-50元内总和里占1元

解决方案 »

  1.   

    --> 测试数据:@tb
    declare @tb table([编号] int,[总金额] int,[批发价] int,[利润] int)
    insert @tb
    select 1001,10,8,1 union all
    select 1002,31,20,5 union all
    select 1003,59,50,20select 总次数=count(1),
      总利润=sum([利润]),
      总批发价=sum([批发价]),
      [10元内总和]=sum(case when [总金额]<=10 then [总金额] else null end),
      [11-30元内总和]=sum(case when [总金额] between 11 and 30 then [总金额] else null end),
      [31-50元内总和]=sum(case when [总金额] between 31 and 50  then [总金额] else null end),        
      [50元以上总和]=sum(case when [总金额]>50 then [总金额] else null end) from @tb
    /*
    总次数         总利润         总批发价        10元内总和      11-30元内总和   31-50元内总和   50元以上总和
    ----------- ----------- ----------- ----------- ----------- ----------- -----------
    3           26          78          10          NULL        31          59
    警告: 聚合或其他 SET 操作消除了空值。
    */
      

  2.   


    IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
    GO
    CREATE TABLE TB(
    ID VARCHAR(50),
    JINE NUMERIC(19,6),
    PIFA NUMERIC(19,6),
    LIRUN NUMERIC(19,6)
    )
    INSERT INTO TB
    SELECT '1001',  10,     8,         1 UNION ALL
    SELECT '1002',      31,     20,         5 UNION ALL
    SELECT '1003',      59,     50,         20 SELECT COUNT(1) '总次数',SUM(PIFA) '总批发价',SUM(LIRUN) '总利润'
    ,SUM(CASE WHEN JINE>10 THEN 10 ELSE JINE END) '10元内总和'
    ,SUM(CASE WHEN JINE>30 THEN 20 ELSE 
    (CASE WHEN  JINE<11 THEN 0 ELSE JINE-10 END
    )END) '11-30元内总和'
    ,SUM(CASE WHEN JINE>50 THEN 20 ELSE 
    (CASE WHEN  JINE<31 THEN 0 ELSE JINE-30 END
    )END) '31-50元内总和'
    ,SUM(CASE WHEN JINE<51 THEN 0 ELSE JINE-50 END) '50元以上总和'
    FROM TB/*
    总次数  总利润  总批发价  10元内总和        11-30元内总和          31-50元内总和        50元以上总和
    3 78.000000 26.000000 30.000000 40.000000 21.000000 9.000000
    */
      

  3.   


    IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
    GO
    CREATE TABLE TB(
    ID VARCHAR(50),
    JINE NUMERIC(19,6),
    PIFA NUMERIC(19,6),
    LIRUN NUMERIC(19,6)
    )
    INSERT INTO TB
    SELECT '1001',  10,     8,         1 UNION ALL
    SELECT '1002',      31,     20,         5 UNION ALL
    SELECT '1003',      59,     50,         20 SELECT COUNT(1) '总次数',SUM(PIFA) '总批发价',SUM(LIRUN) '总利润',
    '10元内总和'=sum(case when JINE>10 then 10 else JINE end),
    '11-30元内总和'=sum(case when JINE<11 then 0 
    when jine between 11 and 30 then jine-10 
    when jine>30 then 20 end),
    '31-50元内总和'=sum(case when JINE<31 then 0 
    when jine between 31 and 50 then jine-30 
    when jine>50 then 20 end),
    '50元以上总和'=sum(case when jine<51 then 0 else jine-50 end)
    from tb 总次数         总批发价                                    总利润                                     10元内总和                                  11-30元内总和                               31-50元内总和                               50元以上总和
    ----------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
    3           78.000000                               26.000000                               30.000000                               40.000000                               21.000000                               9.000000(1 行受影响)
    跟鸭子的一样,为什么跟楼主的不一样
      

  4.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2009-09-06 21:51:21
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([编号] int,[总金额] int,[批发价] int,[利润] int)
    insert [tb]
    select 1001,10,8,1 union all
    select 1002,31,20,5 union all
    select 1003,59,50,20
    --------------开始查询--------------------------
    select 
      count(1) '总次数',
      sum(批发价) '总批发价',
      sum(利润) '总利润',
      sum(case when 总金额>10 then 10 else 批发价 end) as '10元内总和',
      sum(case when 总金额<11 then 0 as'11-30元内总和' 
             when 总金额 between 11 and 30 then 批发价-10 
             when 总金额>30 then 20 end),
      sum(case when 总金额<31 then 0 as '31-50元内总和'
             when 总金额 between 31 and 50 then 总金额-30 
             when 总金额>50 then 20 end),
      sum(case when 总金额<51 then 0 else 总金额-50 end)as '50元以上总和'
    from 
     tb ----------------结果----------------------------
    /* 总次数         总批发价        总利润         10元内总和      11-30元内总和   31-50元内总和   50元以上总和
    ----------- ----------- ----------- ----------- ----------- ----------- -----------
    3           78          26          28          40          21          9(1 行受影响)*/