怎样在查询结果中对记录编号
这里有一个表:姓名 序号 领用品
张三 1 电脑
李四 2 电脑
张三 3 工具箱
李四 4 打印机
张三 5 办公桌
张三 6 转椅
李四 7 电脑
李四 8 扫描仪
李四 9 办公桌
李四 10 转椅
张三 11 管子钳
李四 12 计算尺
我想在查询的结果集中重新对序号编号,如下:
姓名 序号 领用品
张三 1 电脑
张三 2 工具箱
张三 3 办公桌
张三 4 转椅
张三 5 管子钳
李四 1 电脑
李四 2 打印机
李四 3 电脑
李四 4 扫描仪
李四 5 办公桌
李四 6 转椅
李四 7 计算尺
我做了好久,始终出不来,哪位可以帮帮忙,先谢谢了! 用临时表加Identity函数 select 姓名=name,编号=identity,领用品
from 表 group by name [quote][bo]以下是引用 [un]wuhui5201717[/un] 在 2008-5-22 08:43 的发言:[/bo]
select 姓名=name,编号=identity,领用品
from 表 group by name [/quote]
还是出不来, 报错:','附近有语法错误 select 姓名,identity(int,1,1) as 序号,领用品 INTO #lsTable
from 表 order by 姓名
DELETE 表
INSERT INTO 表
SELECT * FROM #lsTable
DROP TABLE #lsTable [quote][bo]以下是引用 [un]zougonghua[/un] 在 2008-5-22 11:18 的发言:[/bo]
select 姓名,identity(int,1,1) as 序号,领用品 INTO #lsTable
from 表 order by 姓名
DELETE 表
INSERT INTO 表
SELECT * FROM #lsTable
DROP TABLE #lsTable [/quote]
谢谢您很详细的解答.
只是还是有个问题, 序号是从第一条记录编到最后一条记录的, 而我想要的是每个人都从1开始编号. Create TABLE #ls1(姓名 VARCHAR(10),序号 INT,领用品 VARCHAR(20))
INSERT INTO #ls1 VALUES('张三', 1 ,'电脑')
INSERT INTO #ls1 VALUES('李四', 2 ,'电脑')
INSERT INTO #ls1 VALUES('张三', 3 ,'工具箱')
INSERT INTO #ls1 VALUES('李四', 4 ,'打印机')
INSERT INTO #ls1 VALUES('张三', 5 ,'办公桌')
INSERT INTO #ls1 VALUES('张三', 6 ,' 转椅')
INSERT INTO #ls1 VALUES('李四', 7 ,'电脑')
INSERT INTO #ls1 VALUES('李四', 8 ,'扫描仪')
INSERT INTO #ls1 VALUES('李四', 9 ,'办公桌')
INSERT INTO #ls1 VALUES('李四', 10 ,'转椅')
INSERT INTO #ls1 VALUES('张三', 11 ,'管子钳')
INSERT INTO #ls1 VALUES('李四', 12 ,'计算尺')
SELECT 姓名,IDENTITY(INT,1,1) as 序号,领用品
INTO #lsTable
FROM #ls1 ORDER BY 姓名
SELECT 姓名,(序号 - ISNULL((SELECT Max(a.序号) FROM #lsTable a WHERE a.序号<#lsTable.序号 AND a.姓名<>#lsTable.姓名),0)) AS 序号,领用品
FROM #lsTable
DROP TABLE #ls1
DROP TABLE #lsTable 改进版:
SELECT 姓名,(序号 - (SELECT MIN(a.序号) -1 FROM #lsTable a WHERE a.姓名=#lsTable.姓名)) AS 序号,领用品
FROM #lsTable
从理论上来说 效率要高点 程序的可读性也要好点 不错, 谢谢happynight ,语句非常漂亮,简洁而易懂,向你学习!
页:
[1]
