这条怎么出来的?
0001 3 S DEF TEST03 200
0001 3 S DEF TEST03 200
解决方案 »
- MSSQL查询中如何满足这样的条件
- 如何删除一个三级结构
- sql server2005 集成环境中,字段值是否为Null的疑问
- 关于改动某个特定列的排序规则
- 数据库存储文件
- asp 操作sqlserver2000数据库的一个问题
- MSSQL2000中分组查询.如下.请教高手
- 索引表数据的问题???急用,在线关注??
- 如何用DTS编程实现两个ms sql server 间表的备份
- 有谁愿意帮小妹一把吗?(关于DLL中引用DAO的问题)
- 安装过程提示以下错误:Command line option syntax error.Type Comemand /? for Help.
- 各位高手,一个两表合并很难的问题啊,快救救我吧!!!!!!!!!!!1
试试行吗
那条应该是
0001 4 S DEF TEST03 200
create table A(ord_nmb varchar(10),ord_line_nmb int,type varchar(10),code varchar(10),qty int)
insert A select '0001',1,'S','ABC' ,100
union all select '0001',2,'C','TEST01',null
union all select '0001',3,'C','TEST02',null
union all select '0001',4,'S','DEF' ,200
union all select '0001',5,'C','TEST03',null
union all select '0002',1,'S','GHI' ,300
union all select '0002',2,'C','TEST04',null
union all select '0002',3,'S','JKL' ,400
go--创建一个处理的自定义函数
create function f_str(
@ord_nmb varchar(10),
@ord_line_nmb int
)returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+rtrim(code) from A
where ord_nmb=@ord_nmb
and type='C'
and ord_line_nmb>@ord_line_nmb
and ord_line_nmb<=isnull((
select min(ord_line_nmb) from A
where ord_nmb=@ord_nmb
and type='S'
and ord_line_nmb>@ord_line_nmb
),ord_line_nmb)
return(@r)
end
go--调用函数实现处理
select ord_nmb,ord_line_nmb,type,code
,description=dbo.f_str(ord_nmb,ord_line_nmb)
,qty
from A where type='S'
go--删除测试
drop table A
drop function f_str/*--测试结果ord_nmb ord_line_nmb type code description qty
---------- ------------ ---------- ---------- ------------- --------
0001 1 S ABC TEST01TEST02 100
0001 4 S DEF TEST03 200
0002 1 S GHI TEST04 300
0002 3 S JKL 400(所影响的行数为 4 行)
--*/
2.我只写了查询出结果,要插入B表,只需要在调用时改为:
insert into B
select ord_nmb,ord_line_nmb,type,code
,description=dbo.f_str(ord_nmb,ord_line_nmb)
,qty
from A where type='S'
DROP TABLE [DBO].[TABLEA]
GO
CREATE TABLE TABLEA(
ord_nmb varchar(4) null,
Ord_Line_Nmb int null,
Type varchar(1) null,
Code Varchar(10) null,
Qty int null)
CREATE TABLE TABLEB(
ord_nmb varchar(4) null,
Ord_Line_Nmb int null,
Type varchar(1) null,
Code Varchar(10) null,
[Description] Varchar(100) null,
Qty int null)
INSERT INTO TABLEA VALUES('0001',1,'S','ABC',100)
INSERT INTO TABLEA VALUES('0001',2,'C','TEST01',NULL)
INSERT INTO TABLEA VALUES('0001',3,'C','TEST02',NULL)
INSERT INTO TABLEA VALUES('0001',4,'S','DEF',200)
INSERT INTO TABLEA VALUES('0001',5,'C','TEST03',NULL)
INSERT INTO TABLEA VALUES('0002',1,'S','GHI',300)
INSERT INTO TABLEA VALUES('0002',2,'C','TEST04',NULL)
INSERT INTO TABLEA VALUES('0002',3,'S','JKL',400)
Declare @Des varchar(100)
Declare @Ord_Nmb Varchar(4)
Declare @Ord_Line_Nmb Int
Declare @Type Varchar(10)
Declare @Code Varchar(10)
Declare @Qty Int
--------------------------------------------------------------------
Declare @Ord_Nmb1 Varchar(4)
Declare @Ord_Line_Nmb1 Int
Declare @Type1 Varchar(10)
Declare @Code1 Varchar(10)Declare kk Cursor For
Select Ord_nmb,ord_line_nmb,Type,Code,Qty From TABLEA
open kk
fetch next from kk into @Ord_nmb,@ord_line_nmb,@Type,@Code,@Qty
while @@fetch_status=0
begin
If @Type='S'
begin
Insert into TABLEB
SELECT @Ord_nmb,@ord_line_nmb,@Type,@Code,'',@Qty
Update TABLEB SET [DEscription]=@Des
Where Ord_nmb=@Ord_nmb1 and Ord_Line_nmb=@Ord_Line_nmb1
and Type=@Type1 and Code=@Code1
set @Ord_nmb1=@Ord_nmb
set @ord_line_nmb1=@ord_line_nmb
set @Type1=@Type
set @Code1=@Code
SET @Des=''
end
set @Des=@Des+@Code
fetch next from kk into @Ord_nmb,@ord_line_nmb,@Type,@Code,@Qty
end
close kk
deallocate kk
Select * From Tableb
drop table TableA
DROP TABLE TABLEB