表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
请教大家。怎么实现我想要的结果呢?
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢
表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
请教大家。怎么实现我想要的结果呢?
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢
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进行链接
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 代码我没有试.你自己试一下吧.不行再说:)
<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>
1.把你取来的那些数据
id name filename
0001 张三 一寸像
0001 张三 张三简历
0002 李四 readme
0003 王五 freecell
0003 王五 information 在绑定前相同id,相同name的filename合并一下
可以遍历你的DataTable然后做就行了.
---------------------------------------------------- 2.sql server中写一个自定义的function,用来合并列
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
group by a.recordid
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
再试试.不行再说.
你做left join的时候.可能会有null值.你先把关联的语句查一下.看一下查出来的数据是否有null值.任何值和null值相加都会是null的
把你的脚本,查询语句.还有两个表的数据帖出来.我测试一下看看.
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
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
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
把那个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]
0003 王五 freecell,information
0001 张三 一寸像,张三简历你可以结了.ha~