首页 新闻 赞助 找找看

求sql 语句

0
[待解决问题] 解决于 2011-07-17 17:44


有一个表a

id

1

2

3

4

还有一个表b

id pid

1   1

2   1

3   3

4   2

5   2

要求输出

id   sid

1     1,2

2     2,4,5

3     3

4     4 

5     5 

a表是一个数据主表,b表id是对应a表id的,pid是该列id的父id,输出表是a表数据,结合b表,输出的sid是输出列id的子id

这个SQL语句怎么写?

tiantiantian的主页 tiantiantian | 初学一级 | 园豆:0
提问于:2011-06-17 17:44
< >
分享
所有回答(3)
0

select a.id, (a.id + ',' + b.pid) as sid from a

  
right join b on a.id=b.id

Jerry Chou | 园豆:2642 (老鸟四级) | 2011-06-17 21:01
这样取出来的数据是
1 1,1
2 2,1
3 3,3
4 4,2吧?
支持(0) 反对(0) 饮料 | 园豆:240 (菜鸟二级) | 2011-06-17 21:15
额?
我又看了一下,好像输出中第三行应该是4,5才对啊。
支持(0) 反对(0) Jerry Chou | 园豆:2642 (老鸟四级) | 2011-06-18 09:25
0

这个用SQL语句实现不了 可以在C#中倒手一步

拿出来a和b的全部数据 为datatable

在a的talbe中添加一列tableA。colunms。Add(“sid”)

if(tableA。rows[i][id]==tableB.rows[j]["pid"])

{

if(string.isnotempty(tableA.rows[i][sid]))

{

tableA.rows[i][sid]=tableB.rows[j]["id"];

}

else

{

tableA.rows[i][sid]=tableA.rows[i][sid]+","+tableB.rows[j]["id"];

}

}

 

最后的tableA就是您要的结果了。

sunlary | 园豆:934 (小虾三级) | 2011-06-21 11:10
0

ALTER FUNCTION  [dbo].[FunDIS](@id int,@datapath varchar(200)) RETURNS varchar(MAX)  ASbegin    declare   @ret   varchar(MAX)          set   @ret= ''         select     @ret=@ret+ ','+ rtrim(DistrictID)         from   DistrictDirectory as dd   where    dd.datapath like @datapath+'%'RETURN(@ret)end 

 

 

写了一个SQL函数实现这个功能了  

yuejianjun | 园豆:20 (初学一级) | 2011-06-21 11:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册