表1是一个基本信息表,有字段id,name,age等 
表2是一个附件字段,有字段id,filename,filetype,filepath
表2主要是人员的附件,附件可能有多个 现有数据如下:
表1:
id      name    age .......
0001    张三    16
0002    李四    20
0003    王五    23表2:
id     filename     filetype     filepath
0001    一寸像        jpg        c:/一寸像.jpg
0001    张三简历      doc        c:/张三简历.doc
0002    readme         txt       (略)
0003    freecell      exe        (略)
0003    information    txt        (略)    我用reapeater,想显示数据如下图。id     name       filename  
0001   张三       一寸像,张三简历 
0002   李四       readme
0003   王五       freecell,information注意:显示的filename都要有链接,也就是带有路径的链接
我现在写了如下sql语句:select 表1.id,表1.name,表2.filename from 表1 left join 表2 on 表1.id = 表2.id但是,列出来的表是这样的:
id     name       filename  
0001   张三       一寸像
0001   张三       张三简历 
0002   李四       readme
0003   王五       freecell
0003   王五       information
请教大家。怎么实现我想要的结果呢?
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢

解决方案 »

  1.   

    不知道你要作何用  你可以先取出值 然后在页面中也就是绑定 filename 这一列值的地方在 用 <a href=<%#Eval ("filepath")%> ></a> 或者用控件也可以。
      

  2.   

    首先,这种表设计得不好,表2应该有个主键,最好这样
    id    nameid    filename    filetype    filepath 
    0001   0001    一寸像        jpg        c:/一寸像.jpg 
    0002   0001    张三简历      doc        c:/张三简历.doc 
    0003   0002    readme        txt      (略) 
    0004   0003    freecell      exe      (略) 
    0005   0003    information    txt     (略)    要简单的话,可以在reapeater里面嵌入reapeater外面的reapeater可以用selecg id,name from 表1嵌入的用select id, filename from 表2 where fileid=外层的id链接可以通过嵌入的id进行链接
      

  3.   

    两种方案:
    1.把你取来的那些数据
    id    name      filename  
    0001  张三      一寸像 
    0001  张三      张三简历 
    0002  李四      readme 
    0003  王五      freecell 
    0003  王五      information 在绑定前相同id,相同name的filename合并一下
    可以遍历你的DataTable然后做就行了.
    ----------------------------------------------------2.sql server中写一个自定义的function,用来合并列
    CREATE FUNCTION dbo.ufn_test1
    (
    @ID   INT--你的id是什么型的你自己改.看你的样子似乎是varchar的
    )   
    RETURNS VARCHAR(1000)
    AS
    BEGIN
    DECLARE @SQL varchar(1000)   
    SET     @SQL=''   
    SELECT  @SQL=@SQL+','+filename FROM 表2 WHERE id  = @ID
    RETURN  STUFF(@SQL,1,1,'')   
    END然后
    select 表1.id,表1.name,dbo.ufn_test1(表1.id)as filename from 表1 left join 表2 on 表1.id = 表2.id 代码我没有试.你自己试一下吧.不行再说:)
      

  4.   

    推荐你用我发的第二种方案解决(sql server中建个function)
      

  5.   

    绑定的话一点代码都不用写,下面是我用DataList显示Northwind库里面的Categories表和Products表,它们的关系也是父子关系        <asp:DataList ID="DataList1" runat="server" DataKeyField="CategoryID" DataSourceID="SqlDataSource1">
                <ItemTemplate>
                    <table style="width: 553px; height: 20px">
                        <tr>
                            <td style="height: 25px">
                                <asp:Label ID="CategoryIDLabel" runat="server" Text='<%# Eval("CategoryID") %>'></asp:Label></td>
                            <td style="height: 25px">
                                <asp:Label ID="CategoryNameLabel" runat="server" Text='<%# Eval("CategoryName") %>'></asp:Label></td>
                            <td style="width: 146px; height: 25px">
                                <asp:Label ID="DescriptionLabel" runat="server" Text='<%# Eval("Description") %>'></asp:Label></td>
                            <td style="width: 5402px; height: 25px">
                                <asp:DataList ID="DataList2" runat="server" DataSourceID="SqlDataSource1" RepeatDirection="Horizontal">
                                    <ItemTemplate>
                                        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("ProductID", "xx.aspx?productid={0}") %>'
                                            Text='<%# Eval("ProductName") %>'></asp:HyperLink>
                                    </ItemTemplate>
                                </asp:DataList><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
                                    SelectCommand="SELECT [ProductID], [ProductName] FROM [Products] WHERE ([CategoryID] = @CategoryID)">
                                    <SelectParameters>
                                        <asp:ControlParameter ControlID="CategoryIDLabel" Name="CategoryID" PropertyName="Text"
                                            Type="Int32" />
                                    </SelectParameters>
                                </asp:SqlDataSource>
                            </td>
                        </tr>
                    </table>
                    <br />
                </ItemTemplate>
            </asp:DataList>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
                SelectCommand="SELECT [CategoryID], [CategoryName], [Description] FROM [Categories]">
            </asp:SqlDataSource>
      

  6.   

    恩,正在试,貌似好像没出来数据。都是null。我自己看看先
      

  7.   

    两种方案: 
    1.把你取来的那些数据 
    id    name      filename  
    0001  张三      一寸像 
    0001  张三      张三简历 
    0002  李四      readme 
    0003  王五      freecell 
    0003  王五      information 在绑定前相同id,相同name的filename合并一下 
    可以遍历你的DataTable然后做就行了. 
    ---------------------------------------------------- 2.sql server中写一个自定义的function,用来合并列 
      

  8.   

    CREATE FUNCTION   dbo.ufn_test1( @RecordID  varchar )   
    RETURNS VARCHAR(1000)
    AS
    BEGIN
         IF (@RecordID='') BEGIN RETURN '' END
     DECLARE @SQL varchar(1000)   
     SET     @SQL=''   
      SELECT  @SQL=@SQL+','+filename FROM SR_File  WHERE RecordID  = @RecordID
      RETURN  STUFF(@SQL,1,1,'')   
    END上面是函数。变了下表名
    下面是sql语句,貌似加上left join 后面的还是出现多条。去掉后就显示唯一。但是是空的filename
    select a.recordid,[dbo].ufn_test1(a.recordid) filename from SR_Record a left join sr_file b on  a.recordid=b.recordid
      

  9.   

    select a.recordid,[dbo].ufn_test1(a.recordid) filename from SR_Record a left join sr_file b on  a.recordid=b.recordid
    group by a.recordid
      

  10.   


    select a.recordid,[dbo].ufn_test1(a.recordid) filename from SR_Record a left join sr_file b on  a.recordid=b.recordid
    group by a.recordid
    再试试.不行再说.
      

  11.   

    试了,结果没有重复的了,但是 filename 没有值 是null;
      

  12.   


    你做left join的时候.可能会有null值.你先把关联的语句查一下.看一下查出来的数据是否有null值.任何值和null值相加都会是null的
      

  13.   

    select a.recordid,b.filename from SR_Record a left join sr_file b on  a.recordid=b.recordid你看下是否有的filename为null?做left join可能会存在这样的情况:)
      

  14.   

    有值怎么会为null,
    把你的脚本,查询语句.还有两个表的数据帖出来.我测试一下看看.
      

  15.   

    使用游标处理的,建了一个临时表,表3select id,[filename] into 表3 from 表2
    declare CS_Temp Cursor
    For
    select id,[filename] from 表2open CS_TempFetch Next From CS_Temp Into @id,@file_name
    While @@Fetch_Status = 0
        begin
            if exists(select * from 表3 where id=@id)
                begin
                   update 表3 set [filename] = [filename] + ',' + @file_name
                end
            Fetch Next From CS_Temp Into @id,@file_name
        endselect 表1.id,表3.[filename] from 表1
    inner join 表3
    on 表1.id = 表3.id
      

  16.   

    我的两个表和function的截图放在我的相册里了。你看看:)
      

  17.   

    对了,这里改下,忘了,不然表3记录不唯一
    declare @Var_TStr VARCHAR(2048)
    declare @id int
    declare @file_name varchar(200)create table 表3
    (
    id int,
    [filename] varchar(2048)
    )
    insert into 表3(id)
    select id from 表2 declare CS_Temp Cursor
    For
    select id,[filename] from 表2open CS_TempFetch Next From CS_Temp Into @id,@file_name
    While @@Fetch_Status = 0
        begin
            if exists(select * from 表3 where id=@id)
                begin
                   update 表3 set [filename] = [filename] + ',' + @file_name
                end
            Fetch Next From CS_Temp Into @id,@file_name
        endselect 表1.id,表3.[filename] from 表1
    inner join 表3
    on 表1.id = 表3.idinsert into 表3(id)
    select id from 表2 
      

  18.   

    忙中出错,重新修改了下
    declare @Var_TStr VARCHAR(2048) 
    declare @id int 
    declare @file_name varchar(200) create table 表3 

    id int, 
    [filename] varchar(2048) 

    insert into 表3(id) 
    select id from 表1declare CS_Temp Cursor 
    For 
    select id,[filename] from 表2 open CS_Temp Fetch Next From CS_Temp Into @id,@file_name 
    While @@Fetch_Status = 0 
        begin 
            if exists(select * from 表3 where id=@id) 
                begin 
                  update 表3 set [filename] = [filename] + ',' + @file_name 
                end 
            Fetch Next From CS_Temp Into @id,@file_name 
        end select 表1.id,表3.[filename] from 表1 
    inner join 表3 
    on 表1.id = 表3.id 
      

  19.   

    不好意思..可以了呵呵.
    把那个function改一下
    create FUNCTION  dbo.ufn_test1( @RecordID  varchar(4) )
    create table table1
    (
    [id] varchar(4),
    [name] varchar(20),
    [age] int
    )create table table2
    (
    [id] varchar(4),
    [filename] varchar(20)
    )insert into table1
    select '0001','张三',16
    union
    select '0002','李四',20
    union
    select '0003','王五',23 insert into table2
    select '0001','一寸像'
    union
    select '0001','张三简历'
    union
    select '0002','readme'
    union
    select '0003','freecell'
    union
    select '0003','information'
    create FUNCTION  dbo.ufn_test1( @RecordID  varchar(4) ) --这里的问题varchar(4)
    RETURNS VARCHAR(1000) 
    AS 
    BEGIN 
        IF (@RecordID='') BEGIN RETURN '' END 
    DECLARE @SQL varchar(1000)  
    SET    @SQL=''  
      SELECT  @SQL=@SQL+','+[filename] FROM table2  WHERE [id]  = @RecordID 
      RETURN  STUFF(@SQL,1,1,'')  
    END 
    select a.[id],a.[name],dbo.ufn_test1(a.[id]) from table1 a inner join table2 b on a.[id]=b.[id]
    group by a.[id],a.[name]
      

  20.   

    输出结果:0002 李四 readme
    0003 王五 freecell,information
    0001 张三 一寸像,张三简历你可以结了.ha~