现在有一张表:
序号  倾倒区  日期   倾倒量
1      A       2月2   30
2      A       3月4   40
3      B       2月8   30
4      B       3月2   60现在要得到的记录为:
倾倒区   本月倾倒量   历史倾倒量其中,以“倾倒区”来分组,即GROUP BY “倾倒区”   ;
本月倾倒量,是“日期”为当前月份的“倾倒量”的总和;
历史倾倒量,全部的“倾倒量”的总和;

解决方案 »

  1.   

    --------------------------------------------------------------------------
    --  Author : htl258(Tony)
    --  Date   : 2010-03-30 22:10:07
    --  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    --          Jul  9 2008 14:43:34 
    --          Copyright (c) 1988-2008 Microsoft Corporation
    --          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
    --------------------------------------------------------------------------
    --> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([序号] INT,[倾倒区] NVARCHAR(10),[日期] NVARCHAR(10),[倾倒量] INT)
    INSERT [tb]
    SELECT 1,'A',N'2月2',30 UNION ALL
    SELECT 2,'A',N'3月4',40 UNION ALL
    SELECT 3,'B',N'2月8',30 UNION ALL
    SELECT 4,'B',N'3月2',60
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    select distinct [倾倒区],
    本月倾倒量=SUM(倾倒量)over(partition by left(日期,charindex('月',日期)-1)),
    历史倾倒量=SUM(倾倒量)over()
    from tb
    /*
    倾倒区        本月倾倒量       历史倾倒量
    ---------- ----------- -----------
    A          60          160
    A          100         160
    B          60          160
    B          100         160(4 行受影响)
    */
      

  2.   

    select 倾倒区,sum(倾倒量) over(partition by 倾倒区,left(日期,charindex('月',日期)-1)) as 本月倾倒量
    ,sum(倾倒量) over(partition by 倾倒区) as 历史倾倒量  from #tt倾倒区        本月倾倒量       历史倾倒量
    ---------- ----------- -----------
    A          30          70
    A          40          70
    B          30          90
    B          60          90(4 行受影响)这样
      

  3.   

    你好,可能我没说清楚。应该是这样:
    序号 倾倒区 日期        倾倒量
    1 A 2010/2/9 0:00:00    30
    2 A 2010/3/14 0:00:00   40
    3 B 2010/2/5 0:00:00    30
    4 B 2010/3/3 0:00:00    60现在要得到的记录为:
    倾倒区 本月倾倒量 历史倾倒量
    A       40        70
    B       60        90
      

  4.   


    IF NOT OBJECT_ID('[tb]') IS NULL
        DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([序号] INT,[倾倒区] NVARCHAR(10),[日期] NVARCHAR(10),[倾倒量] INT)
    INSERT [tb]
    SELECT 1,'A',N'2月2',30 UNION ALL
    SELECT 2,'A',N'3月4',40 UNION ALL
    SELECT 3,'B',N'2月8',30 UNION ALL
    SELECT 4,'B',N'3月2',60
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    select distinct [倾倒区],
        本月倾倒量=SUM(倾倒量)over(partition by left(日期,charindex('月',日期)-1)),
        历史倾倒量=SUM(倾倒量)over(partition by [倾倒区])
    from tb
    /*
    倾倒区        本月倾倒量       历史倾倒量
    ---------- ----------- -----------
    A          60          70
    A          100         70
    B          60          90
    B          100         90(4 行受影响)
    */
      

  5.   

    能不能再帮帮忙?我刚才可能没说清楚
    应该是这样:  
    序号 倾倒区     日期             倾倒量
    1     A    2010/2/9 0:00:00      30
    2     A    2010/3/14 0:00:00     40
    3     B    2010/2/5 0:00:00      30
    4     B    2010/3/3 0:00:00      60现在要得到的记录为:
    倾倒区 本月倾倒量 历史倾倒量
    A 40 70
    B 60 90
      

  6.   

    IF NOT OBJECT_ID('[tb]') IS NULL
        DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([序号] INT,[倾倒区] NVARCHAR(10),[日期] NVARCHAR(10),[倾倒量] INT)
    INSERT [tb]
    SELECT 1,'A',N'2月2',30 UNION ALL
    SELECT 2,'A',N'3月4',40 UNION ALL
    SELECT 3,'B',N'2月8',30 UNION ALL
    SELECT 4,'B',N'3月2',60
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    select distinct [倾倒区],
        本月倾倒量=(select top 1 倾倒量 from tb where [倾倒区]=t.[倾倒区] order by 日期 desc),
        历史倾倒量=SUM(倾倒量)over(partition by [倾倒区])
    from tb t
    /*
    倾倒区        本月倾倒量       历史倾倒量
    ---------- ----------- -----------
    A          40          70
    B          60          90(2 行受影响)
    */
      

  7.   

    select sum(vol),table1.group1,table2.sum2 from table1,(select group1,sum(vol) as sum2 from table1 group by group1) as table2 
    where table2.group1=table1.group1 and table1.time between #2010-3-1# and #2010-4-1# group by table1.group1 ,table2.sum2楼主给分吧ID group1 time vol
    1 a 2010-3-3 10
    2 a 2010-2-3 20
    3 b 2010-3-10 30
      

  8.   

    IF NOT OBJECT_ID('[tb]') IS NULL
        DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([序号] INT,[倾倒区] NVARCHAR(10),[日期] NVARCHAR(10),[倾倒量] INT)
    INSERT [tb]
    SELECT 1,'A',N'3月2',30 UNION ALL
    SELECT 2,'A',N'3月10',40 UNION ALL
    SELECT 3,'B',N'2月8',30 UNION ALL
    SELECT 4,'B',N'3月2',60
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    --严密的讲这是不对的:
    select distinct [倾倒区],
        本月倾倒量=(select top 1 倾倒量 from tb where [倾倒区]=t.[倾倒区] order by 日期 desc),
        历史倾倒量=SUM(倾倒量)over(partition by [倾倒区])
    from tb t
    /*
    倾倒区        本月倾倒量       历史倾倒量
    ---------- ----------- -----------
    A          30          70
    B          60          90(2 行受影响)
    */
    --考虑日期字段为字符型,转为日期后比较才准确
    select distinct [倾倒区],
        本月倾倒量=(select top 1 倾倒量 from tb where [倾倒区]=t.[倾倒区] order by CAST('1900.'+REPLACE(日期,'月','.') as datetime) desc),
        历史倾倒量=SUM(倾倒量)over(partition by [倾倒区])
    from tb t
    /*
    倾倒区        本月倾倒量       历史倾倒量
    ---------- ----------- -----------
    A          40          70
    B          60          90(2 行受影响)
    */