--写死
SELECT A.ID,COALESCE(B.Num,C.Num)Num
FROM A
LEFT JOIN B ON A.TableName='B'AND A.ID=B.ID
LEFT JOIN C ON A.TableName='C'AND A.ID=C.ID--动态执行
DECLARE @SQL VARCHAR(8000)
DECLARE @TABLEJOIN VARCHAR(8000)
SET @SQL=''
SET @TABLEJOIN=''
SELECT @SQL=@SQL+','+TableName+'.Num'
,@TABLEJOIN=@TABLEJOIN+' LEFT JOIN '+TableName+' ON A.TableName='''+TableName+'''AND A.ID='+TableName+'.ID'
FROM A
GROUP BY TableName
SET @SQL='SELECT A.ID,COALESCE('+STUFF(@SQL,1,1,'')+')Num FROM A'+@TABLEJOIN
PRINT @SQL
EXEC(@SQL)

解决方案 »

  1.   


    create table A表(ID varchar(10),TableName varchar(10))
    create table B表(ID varchar(10),Num varchar(10))
    create table C表(ID varchar(10),Num varchar(10))insert into A表
     select '01','B' union all
     select '02','C' union all
     select '03','B'insert into B表
     select '01','13' union all
     select '02','14' union all
     select '03','15'insert into C表
     select '01','91' union all
     select '02','92' union all
     select '03','93'
     declare @tsql varchar(6000)select @tsql=isnull(@tsql,'case ')
                +' when a.TableName='''+TableName+''' '
                +' then (select top 1 Num from '+TableName+'表 where ID=a.ID) '
     from (select distinct TableName from A表) tselect @tsql='select a.ID,'+@tsql+' else '''' end ''Num'' '
                +' from A表 a'exec(@tsql)/*
    ID         Num
    ---------- ----------
    01         13
    02         92
    03         15(3 row(s) affected)
    */