求SQL語句

Tosp2012 2013-05-10 03:26:27
表A
Bill Lot
A-0001 CA01
A-0001 CA03
A-0001 CB09
A-0002 CB02
A-0002 CD02
A-0002 CQ02
A-0002 CQ03
A-0002 CW02
求一個SQL語句,實現以下值:
ID Bill Lot
1 A-0001 CA01
2 A-0001 CA03
3 A-0001 CB09
1 A-0002 CB02
2 A-0002 CD02
3 A-0002 CQ02
4 A-0002 CQ03
5 A-0002 CW02
...全文
128 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-05-10
  • 打赏
  • 举报
回复
引用 9 楼 Tosp2012 的回复:
[quote=引用 6 楼 ap0405140 的回复:] [quote=引用 5 楼 Tosp2012 的回复:] 謝謝,這個是SQL2005才有的函數吧,我的是SQL2000
--> 3楼回复即是SQL2000的方法.[/quote] 不過,不明白這語句的意思,我小菜鳥,請多多指教。[/quote]他的实际上是两个表关联。
Tosp2012 2013-05-10
  • 打赏
  • 举报
回复
引用 8 楼 DBA_Huangzj 的回复:
又不说清楚,白写了
Sorry ,沒有白寫。這個對於我也有幫助,謝!
Tosp2012 2013-05-10
  • 打赏
  • 举报
回复
引用 6 楼 ap0405140 的回复:
[quote=引用 5 楼 Tosp2012 的回复:] 謝謝,這個是SQL2005才有的函數吧,我的是SQL2000
--> 3楼回复即是SQL2000的方法.[/quote] 不過,不明白這語句的意思,我小菜鳥,請多多指教。
發糞塗牆 2013-05-10
  • 打赏
  • 举报
回复
又不说清楚,白写了
Tosp2012 2013-05-10
  • 打赏
  • 举报
回复
引用 3 楼 ap0405140 的回复:

create table 表A
(Bill varchar(10), Lot varchar(10))

insert into 表A
select 'A-0001', 'CA01' union all
select 'A-0001', 'CA03' union all
select 'A-0001', 'CB09' union all
select 'A-0002', 'CB02' union all
select 'A-0002', 'CD02' union all
select 'A-0002', 'CQ02' union all
select 'A-0002', 'CQ03' union all
select 'A-0002', 'CW02'


select (select count(1) from 表A b
        where b.Bill=a.Bill and b.Lot<=a.Lot) 'ID',
       a.Bill,
       a.Lot
 from 表A a

/*
ID          Bill       Lot
----------- ---------- ----------
1           A-0001     CA01
2           A-0001     CA03
3           A-0001     CB09
1           A-0002     CB02
2           A-0002     CD02
3           A-0002     CQ02
4           A-0002     CQ03
5           A-0002     CW02

(8 row(s) affected)
*/
謝謝了,這個可以。
唐诗三百首 2013-05-10
  • 打赏
  • 举报
回复
引用 5 楼 Tosp2012 的回复:
謝謝,這個是SQL2005才有的函數吧,我的是SQL2000
--> 3楼回复即是SQL2000的方法.
Tosp2012 2013-05-10
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-05-10 15:32:41
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
--	Jun 17 2011 00:54:03 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------------------------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([Bill] varchar(6),[Lot] varchar(4))
insert [A]
select 'A-0001','CA01' union all
select 'A-0001','CA03' union all
select 'A-0001','CB09' union all
select 'A-0002','CB02' union all
select 'A-0002','CD02' union all
select 'A-0002','CQ02' union all
select 'A-0002','CQ03' union all
select 'A-0002','CW02'
--------------开始查询--------------------------

select ROW_NUMBER()OVER(PARTITION BY Bill ORDER BY Lot)id,* from [A]
----------------结果----------------------------
/* 
id                   Bill   Lot
-------------------- ------ ----
1                    A-0001 CA01
2                    A-0001 CA03
3                    A-0001 CB09
1                    A-0002 CB02
2                    A-0002 CD02
3                    A-0002 CQ02
4                    A-0002 CQ03
5                    A-0002 CW02
*/
謝謝,這個是SQL2005才有的函數吧,我的是SQL2000
寡亾 2013-05-10
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-05-10 15:32:41
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
--	Jun 17 2011 00:54:03 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------------------------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([Bill] varchar(6),[Lot] varchar(4))
insert [A]
select 'A-0001','CA01' union all
select 'A-0001','CA03' union all
select 'A-0001','CB09' union all
select 'A-0002','CB02' union all
select 'A-0002','CD02' union all
select 'A-0002','CQ02' union all
select 'A-0002','CQ03' union all
select 'A-0002','CW02'
--------------开始查询--------------------------

select ROW_NUMBER()OVER(PARTITION BY Bill ORDER BY Lot)id,* from [A]
----------------结果----------------------------
/* 
id                   Bill   Lot
-------------------- ------ ----
1                    A-0001 CA01
2                    A-0001 CA03
3                    A-0001 CB09
1                    A-0002 CB02
2                    A-0002 CD02
3                    A-0002 CQ02
4                    A-0002 CQ03
5                    A-0002 CW02
*/
哎,抢分的人这么多啊。。。。这么简单不留给我们这些穷人。
唐诗三百首 2013-05-10
  • 打赏
  • 举报
回复

create table 表A
(Bill varchar(10), Lot varchar(10))

insert into 表A
select 'A-0001', 'CA01' union all
select 'A-0001', 'CA03' union all
select 'A-0001', 'CB09' union all
select 'A-0002', 'CB02' union all
select 'A-0002', 'CD02' union all
select 'A-0002', 'CQ02' union all
select 'A-0002', 'CQ03' union all
select 'A-0002', 'CW02'


select (select count(1) from 表A b
        where b.Bill=a.Bill and b.Lot<=a.Lot) 'ID',
       a.Bill,
       a.Lot
 from 表A a

/*
ID          Bill       Lot
----------- ---------- ----------
1           A-0001     CA01
2           A-0001     CA03
3           A-0001     CB09
1           A-0002     CB02
2           A-0002     CD02
3           A-0002     CQ02
4           A-0002     CQ03
5           A-0002     CW02

(8 row(s) affected)
*/
  • 打赏
  • 举报
回复
select id=row_number()over(partition by Bill order by Lot),* from tb
發糞塗牆 2013-05-10
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-05-10 15:32:41
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
--	Jun 17 2011 00:54:03 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------------------------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([Bill] varchar(6),[Lot] varchar(4))
insert [A]
select 'A-0001','CA01' union all
select 'A-0001','CA03' union all
select 'A-0001','CB09' union all
select 'A-0002','CB02' union all
select 'A-0002','CD02' union all
select 'A-0002','CQ02' union all
select 'A-0002','CQ03' union all
select 'A-0002','CW02'
--------------开始查询--------------------------

select ROW_NUMBER()OVER(PARTITION BY Bill ORDER BY Lot)id,* from [A]
----------------结果----------------------------
/* 
id                   Bill   Lot
-------------------- ------ ----
1                    A-0001 CA01
2                    A-0001 CA03
3                    A-0001 CB09
1                    A-0002 CB02
2                    A-0002 CD02
3                    A-0002 CQ02
4                    A-0002 CQ03
5                    A-0002 CW02
*/

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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