查询class表,得到下面的记录信息
select a,b,c from class a b c
收帐 公司1 财务核算部门
收帐 公司1 往来单位
收帐 公司2 财务核算部门
收帐 公司2 往来单位
付账 公司1 财务核算部门
付账 公司1 往来单位
付账 公司2 财务核算部门
付账 公司2 往来单位 我如何写语句得到下面的显示结果?
收帐 公司1 财务核算部门,往来单位
收帐 公司2 财务核算部门,往来单位
付账 公司1 财务核算部门,往来单位
付账 公司2 财务核算部门,往来单位
select a,b,c from class a b c
收帐 公司1 财务核算部门
收帐 公司1 往来单位
收帐 公司2 财务核算部门
收帐 公司2 往来单位
付账 公司1 财务核算部门
付账 公司1 往来单位
付账 公司2 财务核算部门
付账 公司2 往来单位 我如何写语句得到下面的显示结果?
收帐 公司1 财务核算部门,往来单位
收帐 公司2 财务核算部门,往来单位
付账 公司1 财务核算部门,往来单位
付账 公司2 财务核算部门,往来单位
create table class
(
a varchar(20),
b varchar(20),
c varchar(20)
)
goinsert into class
select '收帐','公司1','财务核算部门'
union
select '收帐','公司1','往来单位'
union
select '收帐','公司2','财务核算部门'
union
select '收帐','公司2','往来单位'
union
select '付账','公司1','财务核算部门'
union
select '付账','公司1','往来单位'
union
select '付账','公司2','财务核算部门'
union
select '付账','公司2','往来单位'gocreate FUNCTION fun
(
@a varchar(100),@b varchar(100)
)
RETURNS varchar(6000)
AS
BEGIN
DECLARE @ResultVar varchar(6000)
set @ResultVar=''
select @ResultVar=@ResultVar+','+c from class
where a=@a and b=@b
return substring(@ResultVar,2,6000)
END
GO
select a,b,dbo.fun(a,b) from class group by a,bgo
drop function fun
drop table classgohttp://www.mybuffet.cn
vpreCode := Qs(Itemkbm.FieldByName('FSubjectCode').AsString);
vPrecompany := Itemkbm.FieldByName('FCompanyID').AsInteger;
while not Itemkbm.Eof do
begin
SubjectCode := Qs(Itemkbm.FieldByName('a').AsString);
companyid := Itemkbm.FieldByName('b').AsInteger;
caption := Itemkbm.FieldByName('c').AsString;
if SubjectCode = vpreCode then
begin
if companyid= vPrecompany then
begin
StringAdd(captionvalues,caption,',');
values:=IntToStr(companyid)+'='+captionvalues;
strs.Append(values);
end else
begin
captionvalues:='';
StringAdd(captionvalues,caption,',');
values:=IntToStr(companyid)+'='+captionvalues;
strs.Append(values);
end;
end else
begin
for i := 0 to strs.Count-1 do
begin
ShowMessage(strs.Strings[i]);
end;
end;
vpreCode := Qs(Itemkbm.FieldByName('a').AsString);
vPrecompany := Itemkbm.FieldByName('b').AsInteger;
Itemkbm.Next;
end;执行ShowMessage(strs.Strings[i])显示如下:(注:这不是我想要的结果)
收帐 公司1 财务核算部门
收帐 公司1 财务核算部门,往来单位
收帐 公司2 财务核算部门
收帐 公司2 财务核算部门,往来单位
付账 公司1 财务核算部门
付账 公司1 财务核算部门,往来单位
付账 公司2 财务核算部门
付账 公司2 财务核算部门,往来单位 下面是我想要得到的结果
收帐 公司1 财务核算部门,往来单位
收帐 公司2 财务核算部门,往来单位
付账 公司1 财务核算部门,往来单位
付账 公司2 财务核算部门,往来单位
Create table #T1
(
a nvarchar(10),
b nvarchar(10),
c nvarchar(20)
)
insert into #T1 values('收帐','公司1','财务核算部门')
insert into #T1 values('收帐','公司1','往来单位')
insert into #T1 values('收帐','公司2','财务核算部门')
insert into #T1 values('收帐','公司2','往来单位')
insert into #T1 values('付账','公司1','财务核算部门')
insert into #T1 values('付账','公司1','往来单位')
insert into #T1 values('付账','公司2','财务核算部门')
insert into #T1 values('付账','公司2','往来单位')
Create table #T2
(
a nvarchar(10),
b nvarchar(10),
c nvarchar(20)
)Create table #T3
(
a nvarchar(10),
b nvarchar(10),
c nvarchar(20)
)insert into #T2
select * from #T1 where c='财务核算部门' insert into #T3
select * from #T1 where c='往来单位'
select E.a, E.b, E.c + ',' + F.C
from #T2 as E
inner join #T3 as F on E.B = F.B
where E.a = F.adrop table #T1
drop table #T2
结果:
vPrecompany := Itemkbm.FieldByName('FCompanyID').AsInteger;
是什么?你的字段不是a,b,c么?
begin
StringAdd(captionvalues,caption,',');
values:=IntToStr(companyid)+'='+captionvalues;
strs.Append(values);
end else
begin
captionvalues:='';
StringAdd(captionvalues,caption,',');
values:=IntToStr(companyid)+'='+captionvalues;
strs.Append(values);
end;
你这段代码是不是一个是加“收帐 公司1 财务核算部门 ”,否则加“收帐 公司1 财务核算部门,往来单位 ”?
如果是这样那直接屏蔽掉不适合的不就行了?
{循环记录集,将核算项目以逗号分开显示于表格}
function TSevCompanySubjectQry.DisposeData(const aConn: TSqlConnection;
const ATableName: string): Boolean;
var
caption,captionvalues,
SubjectCode,
vReason:string;
vSql:string;
companyid:Integer;
vpreCode: string;
vPrecompany: integer; strs :TStrings;
i,lenvalues :Integer;
values,field,fieldvalues,
vname:string;
begin
strs := TStringList.Create; vpreCode := Qs(Itemkbm.FieldByName('FSubjectCode').AsString);
vPrecompany := Itemkbm.FieldByName('FCompanyID').AsInteger;
Itemkbm.First;
while not Itemkbm.Eof do
begin
SubjectCode := Qs(Itemkbm.FieldByName('FSubjectCode').AsString);
companyid := Itemkbm.FieldByName('FCompanyID').AsInteger;
caption := Itemkbm.FieldByName('FCaption').AsString;
if SubjectCode = vpreCode then
begin
if companyid= vPrecompany then
begin
StringAdd(captionvalues,caption,',');
values:=IntToStr(companyid)+'='+captionvalues;
end else
begin
strs.Append(values);
captionvalues:='';
StringAdd(captionvalues,caption,',');
values:=IntToStr(companyid)+'='+captionvalues;
end;
end else
begin
strs.Append(values);
for i := 0 to strs.Count-1 do
begin
field:='f%s_1=%s,f%s_2=%s';
field:=Format(field,[strs.Names[i],Qs('√'),strs.Names[i],qs(strs.Values[strs.Names[i]])]);
stringadd(fieldvalues,field,',');
end;
vSql:='update %s set '+fieldvalues+' where FSubjectCode=%s';
vSql:=Format(vSql,[ATableName,vpreCode]);
try
if not ConnExecute(aConn, vSql, vReason) then Exit;
except
on e:Exception do
ShowMessage(e.Message);
end;
captionvalues:='';
values:='';
strs.Clear;
fieldvalues:=''; captionvalues:=caption;
values:=IntToStr(companyid)+'='+captionvalues;
end; vpreCode := Qs(Itemkbm.FieldByName('FSubjectCode').AsString);
vPrecompany := Itemkbm.FieldByName('FCompanyID').AsInteger;
Itemkbm.Next;
if Itemkbm.Eof then
begin
fieldvalues:='';
strs.Append(values);
for i := 0 to strs.Count-1 do
begin
field:='f%s_1=%s,f%s_2=%s';
field:=Format(field,[strs.Names[i],Qs('√'),strs.Names[i],qs(strs.Values[strs.Names[i]])]);
stringadd(fieldvalues,field,',');
end;
vSql:='update %s set '+fieldvalues+' where FSubjectCode=%s';
vSql:=Format(vsql,[ATableName,SubjectCode]);
try
if not ConnExecute(aConn, vSql, vReason) then Exit;
except
on e:Exception do
ShowMessage(e.Message);
end; end;
end;
Result :=True;
end;
if object_id('tb') is not null
drop table tb
go
create table tb(a varchar(10),b varchar(10),c varchar(20))
go
insert into tb
select '收帐','公司1','财务核算部门' union all
select '收帐','公司1','往来单位' union all
select '收帐','公司2','财务核算部门' union all
select '收帐','公司2','往来单位' union all
select '付账','公司1','财务核算部门' union all
select '付账','公司1','往来单位' union all
select '付账','公司2','财务核算部门' union all
select '付账','公司2','往来单位'
goif object_id('uf_union') is not null
drop function uf_union
go
create function uf_union(@a varchar(10),@b varchar(10))
returns varchar(100)
as
begin
declare @str varchar(100)
select @str=isnull(@str+',','')+c from tb where a=@a and b=@b
return @str
end
go
select a,b,dbo.uf_union(a,b) from tb group by a,b