日期:2014-05-18  浏览次数:20530 次

sql关联表查询--a表的列名是b表的内容
现有一个表   Test_Detail   a(ID,1,2)   和   Test_Item   b(ItemID,ItemName)
其中   a表中有数据
    ID               1             2
  00001       1000         2000  
  b表中有数据
  ItemID     ItemName
    1               固定
    2               变动
要怎么查询才能得到下面这样的结果呢?
ID                 固定                   变动
00001           1000                   2000

请高手指点。

------解决方案--------------------
create table Test_Detail_a(ID varchar(10),[1] int,[2] int)
create table Test_Item_b(ItemID int,ItemName varchar(20))
insert into Test_Detail_a
select '00001 ',1000,2000
insert into Test_Item_b
select 1, '固定 '
union all select 2, '变动 '

declare @sql varchar(2000)
set @sql = ' '
select @sql=@sql+ ', '+ '[ '+name+ '] as [ '+ItemName+ '] '
from (select a.name,b.ItemName
from syscolumns a,Test_Item_b b
where a.name=b.ItemID and id=object_id( 'Test_Detail_a ') and name <> 'ID ')t
exec( 'select ID '+@sql+ ' from Test_Detail_a ')
/*
ID 固定 变动
---------- ----------- -----------
00001 1000 2000
*/