!!!!急!高手、路过者都过来看看这个问题!

zxf305home 2005-05-25 06:08:19

现有一表A如:
MLH AJH SXH TIME REMARK
H2.2 现有一表A字段如下:
MLH AJH SXH TIME REMARK
H2.2 001 20050102 备注
H2.2 001 20050501 说明
H2.2 002 20050102
H2.2 003 20050402 说明
H2.2 003 20010201
H2.2 003 20040201 附注
……
H4.1 001 20050102
H4.1 002 20050502 说明
H4.1 002 20050502 说明
H4.1 002 20050502 说明
H4.1 004 20050401 说明
H4.1 004 20050502 附注
H4.1 005 20050502 附注
……
……

————现想用什么方法实现把表A的数据变为如下:

MLH AJH SXH TIME REMARK
H2.2 001 1 20050102 备注
H2.2 001 2 20050501 说明
H2.2 002 1 20050102
H2.2 003 1 20050402 说明
H2.2 003 2 20010201
H2.2 003 3 20040201 附注
……
H4.1 001 1 20050102
H4.1 002 1 20050502 说明
H4.1 002 2 20050502 说明
H4.1 002 3 20050502 说明
H4.1 004 1 20050401 说明
H4.1 004 2 20050502 附注
H4.1 005 1 20050502 附注
……
……
注(说明):就是现有表A中一字段SXH,想对SXH加一个顺序值,此顺序什是根据MLH、AJH这二个字段来的。如果MLH、AJH二者的值相同并且只有一个相同的,那么,SXH只有一个值1,如果有多个相同,SXH是值从1到最后一个相同数。

请问这个问题如何在数据库中实现。
高手请回复!
路过的请帮忙顶一下。

谢谢!
...全文
94 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
paoluo 2005-05-26
就是在数据库中查询和当前记录的MLH、AJH 相等的,并且ID小于当前ID的个数,也即当前ID的序号。
回复
zxf305home 2005-05-26
谢谢————————
to paoluo(一天到晚游泳的鱼)
请问:
Update T
Set SXH = (Select Count(*) from A Where MLH=T.MLH And AJH=T.AJH And ID<=T.ID)
From A T
这句的具体解释是什么?
特别是SXH = (Select Count(*) from A Where MLH=T.MLH And AJH=T.AJH And ID<=T.ID)
我想不通!

谢谢!
回复
paoluo 2005-05-26
--建立测试环境
Create Table A
(MLH Varchar(10),
AJH Varchar(10),
SXH Int,
TIME Varchar(10),
REMARK Nvarchar(100))
--插入数据
Insert A (MLH,AJH,TIME,REMARK)
SELECT 'H2.2' ,'001','20050102' ,N'备注'
UNION ALL
SELECT 'H2.2', '001', '20050501', N'说明'
UNION ALL
SELECT 'H2.2', '002', '20050102',''
UNION ALL
SELECT 'H2.2', '003', '20050402', N'说明'
UNION ALL
SELECT 'H2.2', '003', '20010201', ''
UNION ALL
SELECT 'H2.2', '003', '20040201', N'附注'
UNION ALL
SELECT 'H4.1', '001', '20050102',''
UNION ALL
SELECT 'H4.1', '002' , '20050502', N'说明'
UNION ALL
SELECT 'H4.1', '002', '20050502', N'说明'
UNION ALL
SELECT 'H4.1', '002', '20050502', N'说明'
UNION ALL
SELECT 'H4.1', '004', '20050401', N'说明'
UNION ALL
SELECT 'H4.1' , '004' , '20050502', N'附注'
UNION ALL
SELECT 'H4.1' , '005' , '20050502', N'附注'
GO
--测试
Alter table A Add ID Int Identity(1,1)
GO
Update T
Set SXH = (Select Count(*) from A Where MLH=T.MLH And AJH=T.AJH And ID<=T.ID)
From A T
GO
Alter table A Drop Column ID
GO
Select * from A
--删除测试环境
Drop Table A
--结果
/*
MLH AJH SXH TIME REMARK
H2.2 001 1 20050102 备注
H2.2 001 2 20050501 说明
H2.2 002 1 20050102
H2.2 003 1 20050402 说明
H2.2 003 2 20010201
H2.2 003 3 20040201 附注
H4.1 001 1 20050102
H4.1 002 1 20050502 说明
H4.1 002 2 20050502 说明
H4.1 002 3 20050502 说明
H4.1 004 1 20050401 说明
H4.1 004 2 20050502 附注
H4.1 005 1 20050502 附注
*/
回复
zxf305home 2005-05-26
感谢以上的回复!
不过以上的回复都无法达到我的要求!
第一:
——————to libin_ftsafe(子陌红尘)
你的update 语句无法运行。
错误如下:
服务器: 消息 170,级别 15,状态 1,行 15
第 15 行: 'SXH' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 16
在关键字 'from' 附近有语法错误。

第二:
——————to wudan8057(我要搬家)
你的结果是可以,但你只是建了一个临时表。运行后临时表里的数据是正确的,但我是想要直接在原数据库中进行update修改!

请高手回复!
路过的顶一下。!
回复
huangdun 2005-05-25
回复
ReViSion 2005-05-25
update A set sxh=(Select count(*) from A b where b.mlh=a.mlh and a.ajh=b.ajh and a.time>=b.time)
from A a

回复
ReViSion 2005-05-25
update aa set sxh=(Select count(*) from aa b where b.mlh=a.mlh and a.ajh=b.ajh and a.time>=b.time)
from aa a
回复
weixiao51 2005-05-25
select identity(int,1,1) AS sxh, * into #a from A order by MLH, AJH, TIME

select MLH, AJH, min(sxh) AS mi_sxh into #b from #a group by MLH, AJH having min(sxh) > 1

updaet #a set #a.sxh = #a.sxh - #b.sxh + 1 from #b where #a.MLH=#b.MLH, #a.AJH=#b.AJH

select * from #a

drop table #a
drop table #b

回复
wudan8057 2005-05-25
SELECT *
INTO #TEST
FROM
(
SELECT 'H2.2' MLH,'001'AJH,'20050102'TIME ,'备注' REMARK
UNION
SELECT 'H2.2', '001', '20050501', '说明'
UNION
SELECT 'H2.2', '002', '20050102',''
UNION
SELECT 'H2.2', '003', '20050402', '说明'
UNION
SELECT 'H2.2', '003', '20010201', ''
UNION
SELECT 'H2.2', '003', '20040201', '附注'
UNION
SELECT 'H4.1', '001', '20050102',''
UNION
SELECT 'H4.1', '002' , '20050502', '说明'
UNION
SELECT 'H4.1', '002', '20050502', '说明'
UNION
SELECT 'H4.1', '002', '20050502', '说明'
UNION
SELECT 'H4.1', '004', '20050401', '说明'
UNION
SELECT 'H4.1' , '004' , '20050502', '附注'
UNION
SELECT 'H4.1' , '005' , '20050502', '附注'
) A


SELECT
MLH,
AJH,
SXH = (SELECT COUNT(*) FROM #TEST B WHERE B.MLH + B.AJH + B.TIME <= A.MLH + A.AJH + A.TIME AND B.MLH + B.AJH = A.MLH + A.AJH ),
TIME,
REMARK
FROM #TEST A
ORDER BY A.MLH,A.AJH,A.TIME,A.REMARK

DROP TABLE #TEST

回复
paoluo 2005-05-25
晕,又写错了,红尘的是对的。
回复
子陌红尘 2005-05-25
alter table A add id int identity(1,1)

update t
SXH = (select count(*) from A where MLH=t.MLH and AJH=t.AJH and id<=t.id)
from
A t

alter table A drop column id
回复
paoluo 2005-05-25
更新

Update T Set SXH=(Select Count(*) from A Where MLH=A.MLH And AJH=A.AJH And TIME<=T.AJH) from A T
回复
paoluo 2005-05-25
查询


Select
MLH,
AJH,
(Select Count(*) from A Where MLH=A.MLH And AJH=A.AJH And TIME<=T.AJH) As SXH,
TIME,
REMARK
from A T
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2005-05-25 06:08
社区公告
暂无公告