这个SQL怎么写

niuniuhuang 2009-03-13 12:14:59
有表:
table1:
id1 name1
1 a
2 b
3 c
table2:
id2 id1 name2
1 1 m
2 1 n
3 2 m
4 3 o
5 3 q
怎么得到
id1 name1 name2
1 a m,n
2 b m
3 c o,q
...全文
1015 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
确实是26楼为正解,我测试了。主要是要将table2里的id1重复数据写到一个字段里,创建的函数 F_Str可以实现。
  • 打赏
  • 举报
回复
我后来发现了,我的那个代码不能实现楼主的功能,没有将table2.id1里的重复项查询到。
对不起。
  • 打赏
  • 举报
回复
table1:
id1 name1
1 a
2 b
3 c
table2:
id2 id1 name2
1 1 m
2 1 n
3 2 m
4 3 o
5 3 q
怎么得到
id1 name1 name2
1 a m,n
2 b m
3 c o,q

有两种方法,
1:采用left join on
select * from table1 left join table2 on table1.id1=table2.id2

2:采用直接的where条件
select table1.id1,table1.name1,table2.name2 form table1,table2 where table1.id1=table2.id



zzxap 2009-03-19
  • 打赏
  • 举报
回复
人齐可以结贴了
sunwch 2009-03-19
  • 打赏
  • 举报
回复
SELECT A.* FROM TABLE1 A JOIN TABLE2 B ON (A.ID=B.ID);
junior_wu 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 lxf2000104 的回复:]
13楼sql2005处理xml文档方式,也是正解
[/Quote]

sql server 2000不能用那个xml path的。sql 2005能用!根据楼主的sql server版本决定用什么方法吧。
FenHui 2009-03-16
  • 打赏
  • 举报
回复
26楼是正确的
1,2楼根本就没有达到那种把重复的行转换成字段啊
smallcatlee 2009-03-16
  • 打赏
  • 举报
回复
学习 了
fuping860731 2009-03-16
  • 打赏
  • 举报
回复
一楼和四楼,改正51楼
fuping860731 2009-03-16
  • 打赏
  • 举报
回复
我也觉得一楼和二楼的就行了,没必要把简单的东西复杂话。
墨魚丸 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jinjazz 的回复:]
create function dbo.test(@id int)
returns varchar(1000)
as
begin
declare @ret varchar(1000)
set @ret=''
select @ret=@ret+','+name2 from table2 where id1=@id
return @ret
end
go
select *,dbo.test(id1) from table2

[/Quote]

學習了,謝謝
sjt000 2009-03-16
  • 打赏
  • 举报
回复
学习
luafie 2009-03-16
  • 打赏
  • 举报
回复
太强了。。。。。。。。
给出的方法这么多。。。。。。。。
liu329175905 2009-03-16
  • 打赏
  • 举报
回复

create function dbo.test(@id int)
returns varchar(1000)
as
begin
declare @ret varchar(1000)
set @ret=''
select @ret=@ret+','+name2 from table2 where id1=@id
return @ret
end
go
select *,dbo.test(id1) from table2
wxg19851001 2009-03-16
  • 打赏
  • 举报
回复
回帖是一种美德!每天回帖即可获得 10 分可用分!
Terry717 2009-03-15
  • 打赏
  • 举报
回复
学习了!
anysys_lee2 2009-03-15
  • 打赏
  • 举报
回复
学习了。
HolyPlace 2009-03-15
  • 打赏
  • 举报
回复
太复杂了吧,一楼的就可以了
hb24775179 2009-03-15
  • 打赏
  • 举报
回复
楼上的都已经用最简单的oracle方法解决了。我就整一个复杂点的,赚点分
建立一个函数
create or replace function my_concat(n NUMBER)
return varchar2
is
type typ_cursor is ref cursor;
v_cursor typ_cursor;
v_temp varchar2(10);
v_result varchar2(4000):= '';
v_sql varchar2(200);
begin
v_sql := 'select name2 from TBL2 where id1=' || n ||' order by id1';
open v_cursor for v_sql;
loop
fetch v_cursor into v_temp;
exit when v_cursor%notfound;
v_result := v_result ||',' || v_temp;
end loop;
return substr(v_result,2);
end;

使用函数
SELECT TBL1.ID1, TBL1.NAME1 ,my_concat(TBL1.ID1) FROM TBL1 ;

输出
1 a m,n
2 b m
3 c o,q
datahandler2 2009-03-14
  • 打赏
  • 举报
回复
牛人真多。其实考察算法。我觉得考察SQL的算法比常规.net考察算法好多了。
加载更多回复(42)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧