求一个SQL语句

weisai 2012-04-11 04:37:13
已有数据

订单号 产品 数量
001 笔记本 20
002 台式机 30
002 笔记本 10
003 台式机 15

求一SQL语句,查询后得出下面结果集

订单序号(整型) 订单号 行号(整型) 产品 数量
1 001 1 笔记本 20
2 002 1 台式机 30
2 002 2 笔记本 10
3 003 1 台式机 15
...全文
119 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
牢头l 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
SQL code


IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE TB(orderid VARCHAR(10),productName VARCHAR(20),num INT)
INSERT INTO tb
SELECT '001', '笔记本', 20 UNION ALL
SELECT '002',……
[/Quote]

select row_number() over (order by 订单号)as 订单序号,订单号, ROW_NUMBER() over(PARTITION BY 订单号 ORDER BY 订单号 DESC) as 行号,产品,数量
from tb
yubofighting 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
3楼有点取巧了
这里举例订单号是001
实现情况是字母和数字组合


另一半错哪了
[/Quote]
订单序号错了
weisai 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
3楼有点取巧了
这里举例订单号是001
实现情况是字母和数字组合


另一半错哪了
[/Quote]
订单序号应该是1223,你是1234
yubofighting 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
select
DENSE_RANK() over(order by [订单号]) as 订单序号
,订单号,(select count(*) from tb where 订单号=tb1.订单号) as 行号
,产品,数量
from tb tb1
[/Quote]


create table #orders
(
orderid varchar(50),
product varchar(50),
num int
);

insert into #orders
select '001','笔记本','20'
union
select '002','台式机','30'
union
select '002','笔记本','10'
union
select '003','台式机','15';


select
DENSE_RANK() over(order by [orderid]) as 订单序号
,orderid,ROW_NUMBER() over (partition by orderid order by num desc) as 行号
,product,num
from #orders tb1

改了一下1楼的代码
勿勿 2012-04-11
  • 打赏
  • 举报
回复
结贴了
Felixzhaowenzhong 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
3楼有点取巧了
这里举例订单号是001
实现情况是字母和数字组合
[/Quote]

另一半错哪了
weisai 2012-04-11
  • 打赏
  • 举报
回复
3楼有点取巧了
这里举例订单号是001
实现情况是字母和数字组合
weisai 2012-04-11
  • 打赏
  • 举报
回复
各对一半
迪迦凹凸曼 2012-04-11
  • 打赏
  • 举报
回复

IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE TB(orderid VARCHAR(10),productName VARCHAR(20),num INT)
INSERT INTO tb
SELECT '001', '笔记本', 20 UNION ALL
SELECT '002','台式机', 30 UNION ALL
SELECT '002','笔记本', 10 UNION ALL
SELECT '003','台式机', 15
go
SELECT CAST(orderid AS int) AS '订单序号',
orderid AS '订单号',
ROW_NUMBER() OVER (PARTITION BY orderid ORDER BY GETDATE() ) AS '行号',
productName AS '产品',
num AS 数量
FROM tb
/*订单序号 订单号 行号 产品 数量
----------- ---------- -------------------- -------------------- -----------
1 001 1 笔记本 20
2 002 1 台式机 30
2 002 2 笔记本 10
3 003 1 台式机 15

(4 行受影响)*/
Felixzhaowenzhong 2012-04-11
  • 打赏
  • 举报
回复
	create table tb(订单号 varchar(32),产品 nvarchar(32),数量 int)
go
insert into tb select '001','笔记本',20 union all
select '002','台式机',30union all
select '002','笔记本',10union all
select '003','台式机',15

select row_number() over (order by 订单号)as 订单序号,订单号, ROW_NUMBER() over(PARTITION BY 订单号 ORDER BY 订单号 DESC),产品,数量
from tb
/*
订单序号 订单号 (无列名) 产品 数量
1 001 1 笔记本 20
2 002 1 台式机 30
3 002 2 笔记本 10
4 003 1 台式机 15
*/
spiritofdragon 2012-04-11
  • 打赏
  • 举报
回复
select
DENSE_RANK() over(order by [订单号]) as 订单序号
,订单号,(select count(*) from tb where 订单号=tb1.订单号) as 行号
,产品,数量
from tb tb1

34,576

社区成员

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

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