有一个表tab,表中有以下内容
代码 动作 数量 班组 工号 机器
A57000101 1 进入 0 B 000053 A1
A57000101 1 进入 0 C 0004 A2
A57000101 1 进入 102033 A NULL NULL 想得到的数据是:
代码 动作 数量 班组 工号 机器
A57000101 1 进入 102033 B,C 000053,0004 A1,A2应该用什么样的查询语句才可以实现呢?
请各位大侠指教!谢谢!
代码 动作 数量 班组 工号 机器
A57000101 1 进入 0 B 000053 A1
A57000101 1 进入 0 C 0004 A2
A57000101 1 进入 102033 A NULL NULL 想得到的数据是:
代码 动作 数量 班组 工号 机器
A57000101 1 进入 102033 B,C 000053,0004 A1,A2应该用什么样的查询语句才可以实现呢?
请各位大侠指教!谢谢!
再发一次:
代码 动作 数量 班组 工号 机器
A57000101 进入 0 B 000053 A1
A57000101 进入 0 C 0004 A2
A57000101 进入 102033 A NULL NULL 想得到的数据是:
代码 动作 数量 班组 工号 机器
A57000101 进入 102033 B,C 000053,0004 A1,A2
@b nvarchar(20),
@c nvarchar(20),
@d nvarchar(20),
@e nvarchar(20)declare @aa nvarchar(20),
@bb nvarchar(20),
@cc nvarchar(20),
@dd nvarchar(20),
@ee nvarchar(20)
set @a = ''
set @b = ''
set @c = ''
declare Fee cursor for
select distinct 代码 from tab where 条件
declare @Fee_ID int
open Fee
fetch next from Fee into @Fee_ID
while @@fetch_status = 0
begin select @a=动作,@b=数量,@c=班组,@d=工号,@e=机器 from tb_asp_feekind where fee_id = @Fee_ID
if @a is not null
set @aa = @AA+@a+','
select @aa if @B is not null
set @BB = @BB+@B+','
select @BB fetch next from Fee into @Fee_ID
end
close Fee
deallocate Fee
@代码 char(20),
@动作 char(30)
)
returns int
as
begin
declare @r int
set @r=0
select @r=sum(数量) from tab
where 代码=@代码
and 动作=@动作
return @r
end
gocreate function fn_班组(
@代码 char(20),
@动作 char(30)
)
returns varchar(2000)
as
begin
declare @r varchar(2000)
set @r=''
select @r=@r+班组 from tab
where 代码=@代码
and 动作=@动作
and 班组 is not null
return @r
end
gocreate function fn_工号(
@代码 char(20),
@动作 char(30)
)
returns varchar(2000)
as
begin
declare @r varchar(2000)
set @r=''
select @r=@r+工号 from tab
where 代码=@代码
and 动作=@动作
and 工号 is not null
return @r
end
gocreate function fn_机器(
@代码 char(20),
@动作 char(30)
)
returns varchar(2000)
as
begin
declare @r varchar(2000)
set @r=''
select @r=@r+机器 from tab
where 代码=@代码
and 动作=@动作
and 机器 is not null
return @r
end
go--查询 select 代码,动作,
dbo.fn_数量(代码,动作) as 数量,
dbo.fn_班组(代码,动作) as 班组,
dbo.fn_工号(代码,动作) as 工号,
dbo.fn_机器(代码,动作) as 机器
from tab
group by 代码,动作
--注意效率确实很低
@代码 char(20),
@动作 char(30)
)
returns varchar(2000)
as
begin
declare @r varchar(2000)
set @r=''
select @r=@r+班组+',' from tab
where 代码=@代码
and 动作=@动作
and 班组 is not null
if @r<>''
set @r=left(@r,len(@r)-1)
return @r
end
gocreate function fn_工号(
@代码 char(20),
@动作 char(30)
)
returns varchar(2000)
as
begin
declare @r varchar(2000)
set @r=''
select @r=@r+工号+',' from tab
where 代码=@代码
and 动作=@动作
and 工号 is not null
if @r<>''
set @r=left(@r,len(@r)-1)
return @r
end
gocreate function fn_机器(
@代码 char(20),
@动作 char(30)
)
returns varchar(2000)
as
begin
declare @r varchar(2000)
set @r=''
select @r=@r+机器+',' from tab
where 代码=@代码
and 动作=@动作
and 机器 is not null
if @r<>''
set @r=left(@r,len(@r)-1)
return @r
end
go
B6305770R 1 101063 B,A,C, 000061,
B6305770R 2 100911 B,C,A, 000145,000467, B20 ,B20 ,B20 ,
B6305770R 3 100700 B,C,A, 000100,000183, B7 ,B7 ,B7 ,
B6305770R 4 100022 A,B,C, 000285, B2 ,B2 ,B2 ,
B6305770R 5 0 C,B,A,
B6305770R 6 100000 C,A,B, 000315,
B6305770R 7 0 A,B,C,
这其中机器名重复了,我在前面加了个distinct以消除...
btlyeo(春天) 的游标还在测试中...
create function fn_机器(
@代码 char(20),
@动作 char(30)
)
returns varchar(2000)
as
begin
declare @r varchar(2000)
set @r=''
select @r=@r+机器+',' from (
select distinct 机器 from tab
where 代码=@代码
and 动作=@动作
and 机器 is not null
)
if @r<>''
set @r=left(@r,len(@r)-1)
return @r
end
go
--最后的“,”怎么没去掉?
代码 动作 数量 班组 工号 机器
B6305770R 1 0 B NULL NULL
B6305770R 1 101063 A 000061 NULL
B6305770R 1 0 C NULL NULL
B6305770R 2 0 B 000145 B20
B6305770R 2 0 C NULL B20
B6305770R 2 100911 A 000467 B20
B6305770R 3 0 C NULL B7
B6305770R 3 10700 B 000100 B7
B6305770R 3 90000 A 000183 B7
B6305770R 4 0 C NULL B2
B6305770R 4 100022 A 000285 B2
B6305770R 4 0 B NULL B2
B6305770R 5 0 B NULL NULL
B6305770R 5 0 C NULL NULL
B6305770R 5 0 A NULL NULL
B6305770R 6 0 B NULL NULL
B6305770R 6 0 C NULL NULL
B6305770R 6 100000 A 000315 NULL
B6305770R 7 0 B NULL NULL
B6305770R 7 0 A NULL NULL当我在查询时加条件工号是000145时,数量的结果有出入...
加条件以机器查询结果是对的