有费用明细表fymx
其中一个收费单号 sfdh 可能要收很多笔费用,如:sfdh收费单号 xh序号 je金额 sfxmmc收费项目名称
00001 1 50 鞋子
00001 2 10 毛衣
00001 3 20 袜子
00001 4 80 大衣
00001 5 40 毛巾00002 1 60 手套
00002 2 70 香皂
00002 3 20 牙刷00003 1 30 皮带
00003 2 80 裤子
00003 3 90 袜子
……现在是由于某种原因,表中的xh 全部为空,我要重新给
它们把xh添上,该如何写处理时间最快呢?我自己写的游标语句要处理几个小时,因为数据量很庞大。大概
这张表中有10万条记录。SELECT *,IDENTITY(INT,1,1) IXH INTO #fymx FROM fydb..fymx
where csfdh= @sfd
其中一个收费单号 sfdh 可能要收很多笔费用,如:sfdh收费单号 xh序号 je金额 sfxmmc收费项目名称
00001 1 50 鞋子
00001 2 10 毛衣
00001 3 20 袜子
00001 4 80 大衣
00001 5 40 毛巾00002 1 60 手套
00002 2 70 香皂
00002 3 20 牙刷00003 1 30 皮带
00003 2 80 裤子
00003 3 90 袜子
……现在是由于某种原因,表中的xh 全部为空,我要重新给
它们把xh添上,该如何写处理时间最快呢?我自己写的游标语句要处理几个小时,因为数据量很庞大。大概
这张表中有10万条记录。SELECT *,IDENTITY(INT,1,1) IXH INTO #fymx FROM fydb..fymx
where csfdh= @sfd
eg:
declare @i int
update ta set id = @i,@i = @i +1
id=row_number()over(order by getdate()),*
from
tb
(
select rn=row_number()over(partition by sfdh order by getdate()),*
from fymx
)
update t set xh=rn
-- Author : htl258(Tony)
-- Date : 2010-04-11 15:21:19
-- 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)
--------------------------------------------------------------------------
--> 生成测试数据表:fymxIF NOT OBJECT_ID('[fymx]') IS NULL
DROP TABLE [fymx]
GO
CREATE TABLE [fymx]([sfdh] NVARCHAR(10),[xh] INT,[je] INT,[sfxmmc] NVARCHAR(10))
INSERT [fymx]
SELECT '00001',NULL,50,N'鞋子' UNION ALL
SELECT '00001',NULL,10,N'毛衣' UNION ALL
SELECT '00001',NULL,20,N'袜子' UNION ALL
SELECT '00001',NULL,80,N'大衣' UNION ALL
SELECT '00001',NULL,40,N'毛巾' UNION ALL
SELECT '00002',NULL,60,N'手套' UNION ALL
SELECT '00002',NULL,70,N'香皂' UNION ALL
SELECT '00002',NULL,20,N'牙刷' UNION ALL
SELECT '00003',NULL,30,N'皮带' UNION ALL
SELECT '00003',NULL,80,N'裤子' UNION ALL
SELECT '00003',NULL,90,N'袜子'
GO
--SELECT * FROM [fymx]-->SQL查询如下:
declare @j int,@i int
update fymx set [xh] = @j,@j = case when @i <> [sfdh] then 1 else isnull(@j,0)+1 end,@i=[sfdh]select * from fymx
/*
sfdh xh je sfxmmc
---------- ----------- ----------- ----------
00001 1 50 鞋子
00001 2 10 毛衣
00001 3 20 袜子
00001 4 80 大衣
00001 5 40 毛巾
00002 1 60 手套
00002 2 70 香皂
00002 3 20 牙刷
00003 1 30 皮带
00003 2 80 裤子
00003 3 90 袜子(11 行受影响)
*/