不好意思上面写错了。:)******************只要一条语句搞定*****************表1
T1ID 客户名称 单据状态
表2
T2ID,T1ID 单据状态
表一和表二是一对多的关系我现在想达到的目的是 当表二中对应表一有多条记录时 。只显示表一,但表二的状态要在表
一中体现出来,比如说 
表一1   张三   开始
2   李四   完成表二1  1   开始
2  1   结束
3  2   开始 
那我要的结果就是1  张三  开始   开始,结束
2  李四  完成   开始  ******************只要一条语句搞定*****************

解决方案 »

  1.   

    一条语句无法搞定,除非你先建立一个函数,类似于sun(字符串类型字段)
      

  2.   

    表二的“单据状态”状态内容数量能确定吗?有几个?就两个?
    如果确定可以一句,如果不确定要用动态SQL
      

  3.   

    表二的“单据状态”状态内容数量能确定吗?有几个?就两个?
    如果确定可以一句,如果不确定要用动态SQL
      

  4.   

    1,建自定义函数
    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
      

  5.   

    2,
    select T1ID, 客户名称, 单据状态, dbo.getstr(T1ID) as 单据状态1 from 表1 group by T1ID
      

  6.   

    我看错了mjhnet说得对,要用函数!
    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
      

  7.   

    to j9988(j9988) 姐姐表二的“单据状态”状态内容数量能确定吗?有几个?就两个?
    如果确定可以一句,如果不确定要用动态SQL
     不能确定,有可能有好几条
      

  8.   

    1,建自定义函数
    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
      

  9.   

    create function getstr(@T1ID int)
    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
      

  10.   

    一条语句 + 一个自定义函数就可以--创建自定义函数,用来实现数据合并
    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