这个sql怎么写

webqq456 2011-10-25 10:15:04
     区域     用水性质                             年份     月       用水量
=====================================================================================================
。。。
市区 生活用水 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月 ****
。。。
...全文
89 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniuswjt 2011-10-25
  • 打赏
  • 举报
回复
oracle你不早说,浪费感情。。。[Quote=引用 13 楼 webqq456 的回复:]
td 是个子查询

SQL code
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_ch……
[/Quote]
--小F-- 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 webqq456 的回复:]
td 是个子查询

SQL code
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_ch……
[/Quote]

MSSQL的参考 6楼 ORACLE的建议去相应版问问
webqq456 2011-10-25
  • 打赏
  • 举报
回复


td 是个子查询
 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;



[Quote=引用 12 楼 fredrickhu 的回复:]
引用 11 楼 webqq456 的回复:
这个会报错 tb 不存在

引用 1 楼 fredrickhu 的回复:
SQL code

select
年份,月,
(select sum(用水量) from tb where 月<=t.月)
from
tb


tb代表的是你的表名 我怎么知道你的表名叫做什么啊?
[/Quote]
--小F-- 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 webqq456 的回复:]
这个会报错 tb 不存在

引用 1 楼 fredrickhu 的回复:
SQL code

select
年份,月,
(select sum(用水量) from tb where 月<=t.月)
from
tb
[/Quote]

tb代表的是你的表名 我怎么知道你的表名叫做什么啊?
webqq456 2011-10-25
  • 打赏
  • 举报
回复
这个会报错 tb 不存在
[Quote=引用 1 楼 fredrickhu 的回复:]
SQL code

select
年份,月,
(select sum(用水量) from tb where 月<=t.月)
from
tb
[/Quote]
--小F-- 2011-10-25
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- 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 行受影响)


*/
geniuswjt 2011-10-25
  • 打赏
  • 举报
回复

/*
年份 月
----------- ---- -----------
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 行受影响)
geniuswjt 2011-10-25
  • 打赏
  • 举报
回复

--方法是这样,如果你的年份和月都是连续且不断的。如果有断的可能要自己做个时间表然后关联

--> 测试数据: [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]
中国风 2011-10-25
  • 打赏
  • 举报
回复
按年份累加

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
*/
中国风 2011-10-25
  • 打赏
  • 举报
回复
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
*/

按 区域/用水性质/年份/月 累加?
薇薇 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fredrickhu 的回复:]
SQL code

select
年份,月,
(select sum(用水量) from tb where 月<=t.月)
from
tb
[/Quote]
中国风 2011-10-25
  • 打赏
  • 举报
回复
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
*/

這樣?
geniuswjt 2011-10-25
  • 打赏
  • 举报
回复
2了,请无视我[Quote=引用 2 楼 geniuswjt 的回复:]
SQL code

select 年份,月,sum(用水量) 用水量 from tb
group by 年份,月
order by 年份,月
[/Quote]
geniuswjt 2011-10-25
  • 打赏
  • 举报
回复

select 年份,月,sum(用水量) 用水量 from tb
group by 年份,月
order by 年份,月
--小F-- 2011-10-25
  • 打赏
  • 举报
回复
select
年份,月,
(select sum(用水量) from tb where 月<=t.月)
from
tb

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧