不好意思上面写错了。:)******************只要一条语句搞定*****************表1
T1ID 客户名称 单据状态
表2
T2ID,T1ID 单据状态
表一和表二是一对多的关系我现在想达到的目的是 当表二中对应表一有多条记录时 。只显示表一,但表二的状态要在表
一中体现出来,比如说
表一1 张三 开始
2 李四 完成表二1 1 开始
2 1 结束
3 2 开始
那我要的结果就是1 张三 开始 开始,结束
2 李四 完成 开始 ******************只要一条语句搞定*****************
T1ID 客户名称 单据状态
表2
T2ID,T1ID 单据状态
表一和表二是一对多的关系我现在想达到的目的是 当表二中对应表一有多条记录时 。只显示表一,但表二的状态要在表
一中体现出来,比如说
表一1 张三 开始
2 李四 完成表二1 1 开始
2 1 结束
3 2 开始
那我要的结果就是1 张三 开始 开始,结束
2 李四 完成 开始 ******************只要一条语句搞定*****************
如果确定可以一句,如果不确定要用动态SQL
如果确定可以一句,如果不确定要用动态SQL
create function getstr(@T1ID int)
returns Nvarchar(4000)
as
begin
declare @str Nvarchar(2000)
set @str=N''
select @str=@str+rtrim(单据状态)+N',' from 表2
where T1ID=@T1ID
if @str<>N''
set @str=left(@str,len(@str)-1)
return @str
endGO2,
select T1ID, 客户名称, dbo.getstr(T1ID) as 单据状态 from 表1 group by T1ID
select T1ID, 客户名称, 单据状态, dbo.getstr(T1ID) as 单据状态1 from 表1 group by T1ID
create function getstr(@T1ID int)
returns varvhar(1000)
as
begin
declare @str varchar(1000)
set @str=''
select @str=@str+单据状态+',' from tab2 where T1ID=@T1ID
set @str=left(@str,len(@str)-1)
return @str
end
语句:
select *,dbo.getstr(t1id) from tab1
如果确定可以一句,如果不确定要用动态SQL
不能确定,有可能有好几条
create function getstr(@T1ID int)
returns Nvarchar(4000)
as
begin
declare @str Nvarchar(2000)
set @str=N''
select @str=@str+rtrim(单据状态)+N',' from 表2
where T1ID=@T1ID
if @str<>N''
set @str=left(@str,len(@str)-1)
return @str
endGO函数建好就不用动了,你以后查询时就是一条语句,就是下面那样.
2,
select T1ID, 客户名称, dbo.getstr(T1ID) as 单据状态 from 表1 group by T1ID
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+rtrim(T1ID)+',' from 表2 where T1ID=@T1ID
select @str=left(@str,len(@str)-1) where @str<>''
return @str
end
GO---调用:
select *,dbo.getstr(T1ID) 单据状态 from 表1
create function fmerg(@ID int)
returns varchar(8000)
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+单据状态 from 表2 where T2ID=@ID
set @re=right(@re,len(@re)-1)
return(@re)
end
--调用上面的那个自定义函数来实现你的目的
select *,dbo.fmerg(T1ID) from 表1