要实现一个编码列

wangchangk 2008-11-28 10:46:49
比如有一个表有两列数据如下

柜台号 单号
1 A
1 B
1 C
2 D
2 E
3 F
想实现取出后的结果如下所示

柜台号 单号 标号
1 A 1
1 B 2
1 C 3
2 D 1
2 E 2
3 F 1
也就是根据柜台号来分组,标号进行增加,请问怎么实现
...全文
50 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
josy 2008-11-28
  • 打赏
  • 举报
回复
---测试数据---
declare @tb table(柜台号 int,单号 varchar(5))
insert @tb
select 1, 'A' union all
select 1, 'B' union all
select 1, 'C' union all
select 2, 'D' union all
select 2, 'E' union all
select 3, 'F'


---查询---
select
柜台号,
单号,
标号=(select count(1) from @tb where 柜台号=a.柜台号 and 单号<=a.单号)
from @tb a

---结果---
柜台号 单号 标号
----------- ----- -----------
1 A 1
1 B 2
1 C 3
2 D 1
2 E 2
3 F 1

(所影响的行数为 6 行)
dawugui 2008-11-28
  • 打赏
  • 举报
回复
create table tb(柜台号 int,  单号  varchar(10))
insert tb select 1 , 'A'
insert tb select 1 , 'B'
insert tb select 1 , 'C'
insert tb select 2 , 'D'
insert tb select 2 , 'E'
insert tb select 3, 'F'

select * , 标号 = (select count(1) from tb where 柜台号 = t.柜台号 and 单号 < t.单号) + 1 from tb t

drop table tb

/*
柜台号 单号 标号
----------- ---------- -----------
1 A 1
1 B 2
1 C 3
2 D 1
2 E 2
3 F 1

(所影响的行数为 6 行)

*/
dawugui 2008-11-28
  • 打赏
  • 举报
回复
比如有一个表有两列数据如下

柜台号 单号
1 A
1 B
1 C
2 D
2 E
3 F
想实现取出后的结果如下所示

柜台号 单号 标号
1 A 1
1 B 2
1 C 3
2 D 1
2 E 2
3 F 1
也就是根据柜台号来分组,标号进行增加,请问怎么实现


select * , 标号 = (select count(1) from tb where 柜台号 = t.柜台号 and 单号 < t.单号) + 1 from tb
wufeng4552 2008-11-28
  • 打赏
  • 举报
回复
declare @t table(柜台号 int,  单号  varchar(10))
insert @t select 1 , 'A'
insert @t select 1 , 'B'
insert @t select 1 , 'C'
insert @t select 2 , 'D'
insert @t select 2 , 'E'
insert @t select 3, 'F'
select * ,cnt=(select count(*) from @t where 柜台号=t.柜台号 and 单号<t.单号)+1 from @t t
/*柜台号 单号 cnt
----------- ---------- -----------
1 A 1
1 B 2
1 C 3
2 D 1
2 E 2
3 F 1

(影響 6 個資料列)*/
ljhcy99 2008-11-28
  • 打赏
  • 举报
回复
select 柜台号, 单号, row_number()over(partition by 柜台号 order by 单号) as 标号
from table
dobear_0922 2008-11-28
  • 打赏
  • 举报
回复
--> By dobear_0922(小熊) 2008-11-28 10:57:17
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([柜台号] int,[单号] varchar(1))
insert [tb]
select 1,'A' union all
select 1,'B' union all
select 1,'C' union all
select 2,'D' union all
select 2,'E' union all
select 3,'F'

select 柜台号, 单号
, 标号=(select count(*) from tb where 柜台号=t.柜台号 and 单号<=t.单号)
from tb t
/*
柜台号 单号 标号
----------- ---- -----------
1 A 1
1 B 2
1 C 3
2 D 1
2 E 2
3 F 1

(6 行受影响)
*/

drop table [tb]
dobear_0922 2008-11-28
  • 打赏
  • 举报
回复
select 柜台号, 单号
, 标号=(select count(*) from tb where 柜台号=t.柜台号 and 单号<=t.单号)
from tb t
chuifengde 2008-11-28
  • 打赏
  • 举报
回复
select *,标号=(select count(1)+1 from [Table] where 柜台号=a.柜台号 and 单号<a.单号) from [Table] a
wangchangk 2008-11-28
  • 打赏
  • 举报
回复
是这样的,刚才有点错位

柜台号 单号
1 A
1 B
1 C
2 D
2 E
3 F
想实现取出后的结果如下所示

柜台号 单号 标号
1 A 1
1 B 2
1 C 3
2 D 1
2 E 2
3 F 1
也就是根据柜台号来分组,标号进行增加,请问怎么实现

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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