22,209
社区成员
发帖
与我相关
我的任务
分享
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表) t
select @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)
*/
--写死
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)