首页 新闻 会员 周边

关于SQl 表如下问题。高手帮忙解决

0
[待解决问题]

首先是 一个主表 T_A   包括 字段id a  b  三个字段。第一条记录的值为  1   a1   b1 

然后 一个表T_B 字段包括 id pid  c  d 4个字段。其中 pid 是主表 id  的外键。

其中有多条记录  如

1  1  c1  d1

2  1  c2  d2

3  1  c3  d3  

因为在做查询的时候 要求 表 T_B 里面 c  d  字段全部满足。 现在想降两个表 联合查询 查询结果 如下。。

 1 a1 b1 c1 d1 c2 d2 c3 d3

前面三个是主表 的 后面的为外键表的。

yzy的主页 yzy | 菜鸟二级 | 园豆:317
提问于:2011-10-17 11:10
< >
分享
所有回答(1)
0

c1 d1 c2 d2 c3 d3 这些数据是需要显示串起来显示在一个字段里面还是显示在各自的字段里面?你想要的效果是1还是2呢?
1:


2:



webaspx | 园豆:1973 (小虾三级) | 2011-10-17 11:36

想要的是 第二种效果 

支持(0) 反对(0) yzy | 园豆:317 (菜鸟二级) | 2011-10-17 11:42

@yzy: 不好意思,一直在工作,给你结果。

DECLARE @values VARCHAR(200),@valued VARCHAR(200),@sql VARCHAR(2000);
SELECT @values='',@valued='',@sql='';
SELECT @values=@values+'['+c+'],' FROM T_B WHERE pid=1;
SELECT @valued=@valued+'['+d+'],' FROM T_B WHERE pid=1;
SET @values=SUBSTRING(@values,0,len(@values));
SET @valued=SUBSTRING(@valued,0,len(@valued));

SET @sql='SELECT * FROM T_A a,('
SET @sql+='SELECT * FROM(SELECT pid,c FROM T_B WHERE pid=1)a PIVOT(mAX(c) FOR c IN('+@values+'))b)b,';
SET @sql+='(SELECT * FROM(SELECT pid,d FROM T_B WHERE pid=1)a PIVOT(mAX(d) FOR d IN('+@valued+'))b)c';
SET @sql+=' where a.id=b.pid and a.id=c.pid'
exec (@sql)

结果如下:

最后Select的时候你可以选择需要那些列。

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2011-10-17 15:12

@Sql第一行写成这样更好点:

SET @sql='SELECT a.*,'+@values+','+@valued+' FROM T_A a,('

这样就不宣誓后面两个表中的pid了。

支持(0) 反对(0) webaspx | 园豆:1973 (小虾三级) | 2011-10-17 15:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册