导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

这个存储过程如何写(100分结贴)

cmt123 2010-06-15 08:33:05
表:table
工序1,材料1,数量,序号
a a1 1 1
a a2 3 1
b b1 1 2
b b3 1 2
c c1 1 3
c c2 2 3

其中序号2的工序包括1,序号3的工序包括2,1,总之:序号大的工序包括所有序号小的工序
展开成table2
工序1,材料1,数量
a a1 1
a a2 3
b b1 1
b b3 1
b a1 1
b a2 3
c c1 1
c c2 2
c b1 1
c b3 1
c a1 1
c a2 3
...全文
172 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yewen360281 2010-06-17
回复
迷途的书童 2010-06-16
不是很懂楼主的意思@
回复
幸运的意外 2010-06-16
select b.工序1,a.材料1,a.数量
from tb a left join (select distinct 序号,工序1 from tb) b on a.序号 <= b.序号
order by b.工序1,a.序号
回复
999朵玫瑰 2010-06-16
向高手们学习了
回复
brownhwy 2010-06-16
先mark,以后有空向高手学习。
回复
beyond_me21 2010-06-16
楼主说明的不是太详细.你是指从现有的表(table)中的数据取出再生成新的表(table2)?还是其它
回复
xingmyworld 2010-06-15
2楼正解
回复
qq501812815 2010-06-15
有些没懂。
回复
xman_78tom 2010-06-15

declare @tab table
([工序1] NVARCHAR(1),[材料1] NVARCHAR(2),[数量] INT,[序号] INT);
insert into @tab
SELECT 'a','a1',1,1 UNION ALL
SELECT 'a','a2',3,1 UNION ALL
SELECT 'b','b1',1,2 UNION ALL
SELECT 'b','b3',1,2 UNION ALL
SELECT 'c','c1',1,3 UNION ALL
SELECT 'c','c2',2,3;
select distinct t1.[工序1], t2.[材料1], t2.[数量]
from @tab t1 inner join @tab t2 on t1.[序号]>=t2.[序号];
/*
工序1 材料1 数量
---- ---- -----------
a a1 1
a a2 3
b a1 1
b a2 3
b b1 1
b b3 1
c a1 1
c a2 3
c b1 1
c b3 1
c c1 1
c c2 2
*/
回复
dawugui 2010-06-15
没看懂,帮顶.
回复
永生天地 2010-06-15
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE tb(工序1 varchar(1),材料1 varchar(2),数量 int,序号 int)

INSERT tb
SELECT 'a','a1', 1 ,1 UNION ALL
SELECT 'a','a2', 3 ,1 UNION ALL
SELECT 'b','b1', 1 ,2 UNION ALL
SELECT 'b','b3', 1 ,2 UNION ALL
SELECT 'c','c1', 1 ,3 UNION ALL
SELECT 'c','c2', 2 ,3


select b.工序1,a.材料1,a.数量
from tb a left join (select distinct 序号,工序1 from tb) b on a.序号 <= b.序号
order by b.工序1,a.序号

/*
工序1 材料1 数量
---- ---- -----------
a a1 1
a a2 3
b a2 3
b a1 1
b b3 1
b b1 1
c a1 1
c a2 3
c b3 1
c b1 1
c c1 1
c c2 2

(所影响的行数为 12 行)*/
回复
-狙击手- 2010-06-15
------------------------------------------------------------------------
-- Author : happyflystone
-- Date : 2010-06-15
-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
--
------------------------------------------------------------------------

-- Test Data: ta
IF OBJECT_ID('[ta]') IS NOT NULL
DROP TABLE [ta]
Go
CREATE TABLE ta([工序1] NVARCHAR(1),[材料1] NVARCHAR(2),[数量] INT,[序号] INT)
Go
INSERT INTO ta
SELECT 'a','a1',1,1 UNION ALL
SELECT 'a','a2',3,1 UNION ALL
SELECT 'b','b1',1,2 UNION ALL
SELECT 'b','b3',1,2 UNION ALL
SELECT 'c','c1',1,3 UNION ALL
SELECT 'c','c2',2,3
GO
--Start
;with cte
as
(select * from ta
union all
select a.[工序1],b.[材料1],b.[数量],b.[序号] from ta b join cte a on a.序号 = b.序号+1
)
select distinct * from cte
order by 1

--Result:
/*

工序1 材料1 数量 序号
---- ---- ----------- -----------
a a1 1 1
a a2 3 1
b a1 1 1
b a2 3 1
b b1 1 2
b b3 1 2
c a1 1 1
c a2 3 1
c b1 1 2
c b3 1 2
c c1 1 3
c c2 2 3

(12 行受影响)
*/
--End
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告