c1 d1 c2 d2 c3 d3 这些数据是需要显示串起来显示在一个字段里面还是显示在各自的字段里面?你想要的效果是1还是2呢?
1:
2:
想要的是 第二种效果
@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的时候你可以选择需要那些列。
@Sql第一行写成这样更好点:
SET @sql='SELECT a.*,'+@values+','+@valued+' FROM T_A a,('
这样就不宣誓后面两个表中的pid了。