如何根据数量列自动拆分订单

yiminglian 2016-04-19 01:43:13
数据库结构如下
表1
序号 单号 数量 备注
1 00-1 2 hh-oo
2 23-9 3 xx-0
.......

查询结果:
序号 单号 数量 备注
1 00-1 1 hh-oo
1 00-1 1 hh-oo
2 23-9 1 xx-0
2 23-9 1 xx-0
2 23-9 1 xx-0
这样的该怎么写sql语句
...全文
306 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiminglian 2016-04-20
  • 打赏
  • 举报
回复
引用 5 楼 roy_88 的回复:
with 表1(序号,单号,数量,备注) as(
select 1,'00-1',2,'hh-oo' union all
select 2,'23-9',3,'xx-o')
,C
as
(select 序号,单号,数量=1,备注,数量2=数量-1 from 表1
UNION ALL 
SELECT 序号,单号,数量=1,备注,数量2=数量2-1 FROM C WHERE 数量2>0)
SELECT 序号,单号,数量,备注 FROM C order by 1
可用辅助表如(#1)或CTE
已解决还是谢谢版主
中国风 2016-04-20
  • 打赏
  • 举报
回复
with 表1(序号,单号,数量,备注) as(
select 1,'00-1',2,'hh-oo' union all
select 2,'23-9',3,'xx-o')
,C
as
(select 序号,单号,数量=1,备注,数量2=数量-1 from 表1
UNION ALL 
SELECT 序号,单号,数量=1,备注,数量2=数量2-1 FROM C WHERE 数量2>0)
SELECT 序号,单号,数量,备注 FROM C order by 1
可用辅助表如(#1)或CTE
yiminglian 2016-04-20
  • 打赏
  • 举报
回复
引用 3 楼 KanzakiOrange 的回复:

;WITH CTE(序号,单号,数量,备注) AS
(
	SELECT 1,'00-1',2 ,'hh-oo'
	UNION ALL
	SELECT 2,'23-9',3 ,'xx-0'
)
SELECT * INTO #Tmp
	FROM CTE a

DECLARE @MaxNum INT
SELECT @MaxNum = MAX(数量)
	FROM #Tmp	

;WITH CTE AS
(
	SELECT 1 AS RN
	UNION ALL
	SELECT CTE.RN+1
		FROM CTE
		WHERE CTE.RN < @MaxNum
)
SELECT a.序号,a.单号,1 AS 数量,a.备注
	FROM #Tmp a
		LEFT JOIN CTE b ON a.数量>= b.RN
这个实例视乎也不通用啊
Ginnnnnnnn 2016-04-19
  • 打赏
  • 举报
回复

;WITH CTE(序号,单号,数量,备注) AS
(
	SELECT 1,'00-1',2 ,'hh-oo'
	UNION ALL
	SELECT 2,'23-9',3 ,'xx-0'
)
SELECT * INTO #Tmp
	FROM CTE a

DECLARE @MaxNum INT
SELECT @MaxNum = MAX(数量)
	FROM #Tmp	

;WITH CTE AS
(
	SELECT 1 AS RN
	UNION ALL
	SELECT CTE.RN+1
		FROM CTE
		WHERE CTE.RN < @MaxNum
)
SELECT a.序号,a.单号,1 AS 数量,a.备注
	FROM #Tmp a
		LEFT JOIN CTE b ON a.数量>= b.RN
yiminglian 2016-04-19
  • 打赏
  • 举报
回复
引用 1 楼 Ekun_sky 的回复:
with 表1(序号,单号,数量,备注) as(
select 1,'00-1',2,'hh-oo' union all
select 2,'23-9',3,'xx-o')



select 序号,单号,1 as 数量,备注 from 表1,master..spt_values where type='p' and number<数量

/*
序号 单号 数量 备注
------------------------
1	00-1	1	hh-oo
1	00-1	1	hh-oo
2	23-9	1	xx-o
2	23-9	1	xx-o
2	23-9	1	xx-o
*/
我想让这个查询通用。比如单号不是00-1数量变成10了也可以使用的代码不知道能否实现
Ekun_sky 2016-04-19
  • 打赏
  • 举报
回复
with 表1(序号,单号,数量,备注) as(
select 1,'00-1',2,'hh-oo' union all
select 2,'23-9',3,'xx-o')



select 序号,单号,1 as 数量,备注 from 表1,master..spt_values where type='p' and number<数量

/*
序号 单号 数量 备注
------------------------
1	00-1	1	hh-oo
1	00-1	1	hh-oo
2	23-9	1	xx-o
2	23-9	1	xx-o
2	23-9	1	xx-o
*/

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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