现在有一张表:
序号 倾倒区 日期 倾倒量
1 A 2月2 30
2 A 3月4 40
3 B 2月8 30
4 B 3月2 60现在要得到的记录为:
倾倒区 本月倾倒量 历史倾倒量其中,以“倾倒区”来分组,即GROUP BY “倾倒区” ;
本月倾倒量,是“日期”为当前月份的“倾倒量”的总和;
历史倾倒量,全部的“倾倒量”的总和;
序号 倾倒区 日期 倾倒量
1 A 2月2 30
2 A 3月4 40
3 B 2月8 30
4 B 3月2 60现在要得到的记录为:
倾倒区 本月倾倒量 历史倾倒量其中,以“倾倒区”来分组,即GROUP BY “倾倒区” ;
本月倾倒量,是“日期”为当前月份的“倾倒量”的总和;
历史倾倒量,全部的“倾倒量”的总和;
-- 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 行受影响)
*/
,sum(倾倒量) over(partition by 倾倒区) as 历史倾倒量 from #tt倾倒区 本月倾倒量 历史倾倒量
---------- ----------- -----------
A 30 70
A 40 70
B 30 90
B 60 90(4 行受影响)这样
序号 倾倒区 日期 倾倒量
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
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 行受影响)
*/
应该是这样:
序号 倾倒区 日期 倾倒量
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
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 行受影响)
*/
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
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 行受影响)
*/