sql查询语句求助

lmm9407 2015-02-03 10:54:09
有3个表,A,B,C。其中A表放其它表的表名,如何查询例如:
A表:
ID TableName
01 B
02 C
03 B

B表:
ID Num
01 13
02 14
03 15

C表:
ID Num
01 91
02 92
03 93
我要得到如下数据:通过表A用ID关联
ID Num
0113
02 92
03 15
将如何查询
...全文
260 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
唐诗三百首 2015-02-04

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)
回复
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-02-03 10:54
社区公告
暂无公告