22,207
社区成员
发帖
与我相关
我的任务
分享
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[用户基础信息]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
CREATE TABLE [dbo].[用户基础信息](
[序号] [decimal](18, 0) NOT NULL,
[用户编码] [char](10) NULL,
[月份] [char](8) NULL,
[上月表码] [decimal](9, 2) NULL,
[本月表码] [decimal](9, 2) NULL,
[水损] [decimal](9, 2) NULL,
[实际用水] [decimal](9, 2) NULL,
[饮水井点播] [decimal](9, 2) NULL,
[灌溉井灌溉] [decimal](9, 2) NULL,
[抄表日期] [datetime] NULL,
[抄表人] [char](8) NULL,
[收款人] [char](8) NULL,
[滞纳金] [decimal](9, 2) NULL,
[收款号码] [decimal](18, 0) NULL,
[本月人口数] [int] NULL,
[其它项目] [decimal](9, 2) NULL,
[应收水费] [decimal](9, 2) NULL,
[实收水费] [decimal](9, 2) NULL,
[状态] [char](1) NULL,
[记账员] [char](8) NULL,
[操作员] [char](8) NULL,
[灌溉收费] [decimal](9, 2) NULL,
[调零] [decimal](9, 1) NULL,
CONSTRAINT [PK_用户基础信息] PRIMARY KEY NONCLUSTERED
(
[序号] ASC
) ON [PRIMARY]
) ON [PRIMARY]
END
285309 0080040074 200911 77.00 80.00 0.00 3.00 0.00 0.00 2009-11-17 00:00:00.000 0.00 200911 1 0.00 4.50 4.50 1 徐向永 徐向永 0.00 NULL
285310 0080040075 200911 197.00 205.00 0.00 8.00 0.00 0.00 2009-11-17 00:00:00.000 0.00 200911 1 0.00 12.00 12.00 1 徐向永 徐向永 0.00 NULL
285311 0080040076 200911 86.00 89.00 0.00 3.00 0.00 0.00 2009-11-17 00:00:00.000 0.00 200911 1 0.00 4.50 4.50 1 徐向永 徐向永 0.00 NULL
285312 0080040077 200911 95.00 98.00 0.00 3.00 0.00 0.00 2009-11-17 00:00:00.000 0.00 200911 1 0.00 4.50 4.50 1 徐向永 徐向永 0.00 NULL
285313 0080040078 200911 59.00 62.00 0.00 3.00 0.00 0.00 2009-11-17 00:00:00.000 0.00 200911 1 0.00 4.50 4.50 1 徐向永 徐向永 0.00 NULL
285314 0080040079 200911 96.00 97.00 0.00 1.00 0.00 0.00 2009-11-17 00:00:00.000 0.00 200911 1 0.00 1.50 1.50 1 徐向永 徐向永 0.00 NULL
十分感谢 我做梦都不会忘记您的大恩大德。。。。
最好给出完整的表结构,测试数据,计算方法和正确结果.
不懂,帮顶,学习,蹭分.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[用户基础信息]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE 用户基础信息
GO
CREATE TABLE [dbo].[用户基础信息](
[序号] [decimal](18, 0) NULL,
[用户编码] [char](10) NULL,
[月份] [char](8) NULL,
[上月表码] [decimal](9, 2) NULL,
[本月表码] [decimal](9, 2) NULL,
[水损] [decimal](9, 2) NULL,
[实际用水] [decimal](9, 2) NULL,
[饮水井点播] [decimal](9, 2) NULL,
[灌溉井灌溉] [decimal](9, 2) NULL,
[抄表日期] [datetime] NULL,
[抄表人] [char](8) NULL,
[收款人] [char](8) NULL,
[滞纳金] [decimal](9, 2) NULL,
[收款号码] [decimal](18, 0) NULL,
[本月人口数] [int] NULL,
[其它项目] [decimal](9, 2) NULL,
[应收水费] [decimal](9, 2) NULL,
[实收水费] [decimal](9, 2) NULL,
[状态] [char](1) NULL,
[记账员] [char](8) NULL,
[操作员] [char](8) NULL,
[灌溉收费] [decimal](9, 2) NULL,
[调零] [decimal](9, 1) NULL
) ON [PRIMARY]
insert 用户基础信息 (用户编码,月份,上月表码,本月表码)
select '0020040074','200911', 77.00, 80.00 union all
select '0020040075','200911', 77.00, 80.00 union all
select '0020040076','200911', 77.00, 80.00 union all
select '0020040074','200912', 90.00, 100.00 union all
select '0020040075','200912', 77.00, 80.00 union all
select '0020040076','200912', 77.00, 80.00 union all
select '0020040074','201001', 110.00, 130.00
--先select看结果
select a.*,b.本月表码 from 用户基础信息 a left join 用户基础信息 b
on convert(datetime,rtrim(a.月份)+'01')=dateadd(m,1,convert(datetime,rtrim(b.月份)+'01'))
and a.用户编码=b.用户编码
where left(a.用户编码,3)='002'
/*
序号 用户编码 月份 上月表码 本月表码 水损 实际用水 饮水井点播 灌溉井灌溉 抄表日期 抄表人 收款人 滞纳金 收款号码 本月人口数 其它项目 应收水费 实收水费 状态 记账员 操作员 灌溉收费 调零 本月表码
-------------------- ---------- -------- ----------- ----------- ----------- ----------- ----------- ----------- ------------------------------------------------------ -------- -------- ----------- -------------------- ----------- ----------- ----------- ----------- ---- -------- -------- ----------- ----------- -----------
NULL 0020040074 200911 77.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040075 200911 77.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040076 200911 77.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040074 200912 90.00 100.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 80.00
NULL 0020040075 200912 77.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 80.00
NULL 0020040076 200912 77.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 80.00
NULL 0020040074 201001 110.00 130.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 100.00
(所影响的行数为 7 行)
*/
--再update
update a set a.上月表码=b.本月表码
from 用户基础信息 a left join 用户基础信息 b
on convert(datetime,rtrim(a.月份)+'01')=dateadd(m,1,convert(datetime,rtrim(b.月份)+'01'))
and a.用户编码=b.用户编码
where left(a.用户编码,3)='002' and b.本月表码 is not null
select * from 用户基础信息
/*
序号 用户编码 月份 上月表码 本月表码 水损 实际用水 饮水井点播 灌溉井灌溉 抄表日期 抄表人 收款人 滞纳金 收款号码 本月人口数 其它项目 应收水费 实收水费 状态 记账员 操作员 灌溉收费 调零
-------------------- ---------- -------- ----------- ----------- ----------- ----------- ----------- ----------- ------------------------------------------------------ -------- -------- ----------- -------------------- ----------- ----------- ----------- ----------- ---- -------- -------- ----------- -----------
NULL 0020040074 200911 77.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040075 200911 77.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040076 200911 77.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040074 200912 80.00 100.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040075 200912 80.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040076 200912 80.00 80.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
NULL 0020040074 201001 100.00 130.00 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
(所影响的行数为 7 行)
*/
问题 没解决掉 倒是喝多了。。。。
--最后加下你要的条件
Update a Set
a.上月表码=b.本月表码
From [用户基础信息] a,[用户基础信息] b
Where a.用户编码=b.用户编码
And datediff(mm,rtrim(b.月份)+'01',rtrim(a.月份)+'01')=1 --你的表结构为CHAR(8),所以要加个RTRIM
And a.[用户编码] Like '002%'
And a.[月份] like '201005%'
-->修改一下:
Update a Set
a.上月表码=b.本月表码
From [用户基础信息] a,[用户基础信息] b
Where a.用户编码=b.用户编码
And datediff(mm,rtrim(b.月份)+'01',rtrim(a.月份)+'01')=1 --你的表结构为CHAR(8),所以要加个RTRIM
-->SQL查询如下:
Update a Set
a.上月表码=b.本月表码
From [用户基础信息] a,[用户基础信息] b
Where a.用户编码=b.用户编码
And datediff(mm,b.月份+'01',a.月份+'01')=1