22,206
社区成员
发帖
与我相关
我的任务
分享
区域 用水性质 年份 月 用水量
=====================================================================================================
。。。
市区 生活用水 2010 11 136878
柳江基隆 生活用水 2010 11 3775
柳江拉堡 行政用水 2010 12 4793
市区 生活用水 2010 04 95684
柳江拉堡 生活用水 2010 01 74
柳江拉堡 特种用水 2010 12 1065
市区 经营用水 2011 01 1948060
市区 经营用水 2010 03 10688
市区 生活用水 2009 08 219
市区 经营用水 2010 06 7176
。。。
期望结果:
---------------------------------------------------
***代表用水量
-----------
2008 01月 ****
2008 01-02月 ****
2008 01-03月 ****
。。。
2011 01-12月 ****
。。。
select dt.year,dt.month ,(select sum(AMOUNT) from dt where month<dt.month) as myamount
from
( SELECT bs.area_name, bs.des, to_char(FREEZE_DTTM,'YYYY') year,to_char(FREEZE_DTTM,'MM') month,sum(bs.statistic_amount) AS AMOUNT
FROM CML_VRS_FTGL BS
WHERE BS.START_DATE between
TO_DATE('2008-1-1', 'YYYY-MM-DD') AND
TO_DATE('2011-12-31', 'YYYY-MM-DD') AND
BS.START_DATE = BS.END_DATE
AND ( FREEZE_DTTM between
TO_DATE('2008-1-1', 'YYYY-MM-DD') AND
TO_DATE('2012-12-31', 'YYYY-MM-DD'))
AND FT_TYPE_FLG IN ('BS', 'BX')
AND SA_TYPE_CD = 'C0WA'
AND FREEZE_SW = 'Y'
AND ((DST_ID NOT IN ('W-LIC-REV', 'W-M5G-REV') AND
AMOUNT <> 0) OR (DST_ID IN ('W-LIC-REV', 'W-M5G-REV')))
group by bs.area_name,des,to_char(FREEZE_DTTM,'YYYY'),to_char(FREEZE_DTTM,'MM')) dt;
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2011-10-25 10:21:04
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86)
-- Apr 22 2011 11:57:00
-- Copyright (c) Microsoft Corporation
-- Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([区域] varchar(8),[用水性质] varchar(8),[年份] int,[月] varchar(2),[用水量] int)
insert [tb]
select '市区','生活用水',2010,'11',136878 union all
select '柳江基隆','生活用水',2010,'11',3775 union all
select '柳江拉堡','行政用水',2010,'12',4793 union all
select '市区','生活用水',2010,'04',95684 union all
select '柳江拉堡','生活用水',2010,'01',74 union all
select '柳江拉堡','特种用水',2010,'12',1065 union all
select '市区','经营用水',2011,'01',1948060 union all
select '市区','经营用水',2010,'03',10688 union all
select '市区','生活用水',2009,'08',219 union all
select '市区','经营用水',2010,'06',7176
--------------开始查询--------------------------
;with f as
(
select
*
from
(select distinct 年份 from tb)a
cross join
(select RIGHT(100+number,2) as 月 from master..spt_values where type='p' and number between 1 and 12)b
)
select
a.年份,a.月,
(select sum(用水量) from tb where 月<=b.月)
from
f a
left join tb b on
a.年份=b.年份 and a.月=b.月
----------------结果----------------------------
/*
(10 行受影响)
年份 月
----------- ---- -----------
2009 01 NULL
2009 02 NULL
2009 03 NULL
2009 04 NULL
2009 05 NULL
2009 06 NULL
2009 07 NULL
2009 08 2061901
2009 09 NULL
2009 10 NULL
2009 11 NULL
2009 12 NULL
2010 01 1948134
2010 02 NULL
2010 03 1958822
2010 04 2054506
2010 05 NULL
2010 06 2061682
2010 07 NULL
2010 08 NULL
2010 09 NULL
2010 10 NULL
2010 11 2202554
2010 11 2202554
2010 12 2208412
2010 12 2208412
2011 01 1948134
2011 02 NULL
2011 03 NULL
2011 04 NULL
2011 05 NULL
2011 06 NULL
2011 07 NULL
2011 08 NULL
2011 09 NULL
2011 10 NULL
2011 11 NULL
2011 12 NULL
(38 行受影响)
*/
/*
年份 月
----------- ---- -----------
2009 08 2061901
2010 01 1948134
2010 03 1958822
2010 04 2054506
2010 06 2061682
2010 11 2202554
2010 12 2208412
2011 01 1948134
(8 行受影响)
--方法是这样,如果你的年份和月都是连续且不断的。如果有断的可能要自己做个时间表然后关联
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (区域 varchar(8),用水性质 varchar(8),年份 int,月 varchar(2),用水量 int)
insert into [tb]
select '市区','生活用水',2010,'11',136878 union all
select '柳江基隆','生活用水',2010,'11',3775 union all
select '柳江拉堡','行政用水',2010,'12',4793 union all
select '市区','生活用水',2010,'04',95684 union all
select '柳江拉堡','生活用水',2010,'01',74 union all
select '柳江拉堡','特种用水',2010,'12',1065 union all
select '市区','经营用水',2011,'01',1948060 union all
select '市区','经营用水',2010,'03',10688 union all
select '市区','生活用水',2009,'08',219 union all
select '市区','经营用水',2010,'06',7176
--开始查询
select 年份,月,(select sum(用水量) from tb where 年份<=年份 and 月<=t.月)
from tb t
group by 年份,月
order by 1,2
--结束查询
drop table [tb]
按年份累加
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([区域] nvarchar(4),[用水性质] nvarchar(4),[年份] int,[月] nvarchar(2),[用水量] int)
Insert #T
select N'市区',N'生活用水','2010',N'11',136878 union all
select N'柳江基隆',N'生活用水','2010',N'11',3775 union all
select N'柳江拉堡',N'行政用水','2010',N'12',4793 union all
select N'市区',N'生活用水','2010',N'04',95684 union all
select N'柳江拉堡',N'生活用水','2010',N'01',74 union all
select N'柳江拉堡',N'特种用水','2010',N'12',1065 union all
select N'市区',N'经营用水','2011',N'01',1948060 union all
select N'市区',N'经营用水','2010',N'03',10688 union all
select N'市区',N'生活用水','2009',N'08',219 union all
select N'市区',N'经营用水','2010',N'06',7176
Go
Select a.[年份],RTRIM(MIN(b.[月]))+CASE WHEN a.月<>MIN(b.月) THEN '-'+a.月 ELSE '' END+'月' AS 月份,SUM(b.[用水量]) AS [用水量]
from #T AS a,#t AS b
WHERE a.[年份]=b.[年份] AND a.[月]>=b.[月]
GROUP BY a.[年份],a.月
ORDER BY a.[年份],a.月
/*
年份 月份 用水量
2009 08月 219
2010 01月 74
2010 01-03月 10762
2010 01-04月 106446
2010 01-06月 113622
2010 01-11月 508550
2010 01-12月 520266
2011 01月 1948060
*/
Select *,(SELECT SUM([用水量]) FROM #T WHERE [区域]=a.[区域] AND [用水性质]=a.[用水性质] AND [年份]=a.[年份] AND [月]<=a.[月]) AS 累加
from #T AS a
ORDER BY 1,2,3,4
/*
区域 用水性质 年份 月 用水量 累加
市区 生活用水 2009 08 219 219
市区 生活用水 2010 04 95684 95684
市区 生活用水 2010 11 136878 232562
市区 经营用水 2010 03 10688 10688
市区 经营用水 2010 06 7176 17864
市区 经营用水 2011 01 1948060 1948060
柳江拉堡 生活用水 2010 01 74 74
柳江拉堡 行政用水 2010 12 4793 4793
柳江拉堡 特种用水 2010 12 1065 1065
柳江基隆 生活用水 2010 11 3775 3775
*/
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([区域] nvarchar(4),[用水性质] nvarchar(4),[年份] int,[月] nvarchar(2),[用水量] int)
Insert #T
select N'市区',N'生活用水','2010',N'11',136878 union all
select N'柳江基隆',N'生活用水','2010',N'11',3775 union all
select N'柳江拉堡',N'行政用水','2010',N'12',4793 union all
select N'市区',N'生活用水','2010',N'04',95684 union all
select N'柳江拉堡',N'生活用水','2010',N'01',74 union all
select N'柳江拉堡',N'特种用水','2010',N'12',1065 union all
select N'市区',N'经营用水','2011',N'01',1948060 union all
select N'市区',N'经营用水','2010',N'03',10688 union all
select N'市区',N'生活用水','2009',N'08',219 union all
select N'市区',N'经营用水','2010',N'06',7176
Go
Select *,(SELECT SUM([用水量]) FROM #T WHERE [区域]=a.[区域] AND [用水性质]=a.[用水性质] AND [年份]=a.[年份] AND [月]<=a.[月]) AS 累加
from #T AS a
ORDER BY 1,2,3
/*
区域 用水性质 年份 月 用水量 累加
市区 生活用水 2009 08 219 219
市区 生活用水 2010 11 136878 232562
市区 生活用水 2010 04 95684 95684
市区 经营用水 2010 06 7176 17864
市区 经营用水 2010 03 10688 10688
市区 经营用水 2011 01 1948060 1948060
柳江拉堡 生活用水 2010 01 74 74
柳江拉堡 行政用水 2010 12 4793 4793
柳江拉堡 特种用水 2010 12 1065 1065
柳江基隆 生活用水 2010 11 3775 3775
*/
select 年份,月,sum(用水量) 用水量 from tb
group by 年份,月
order by 年份,月
select
年份,月,
(select sum(用水量) from tb where 月<=t.月)
from
tb