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
将如何查询
...全文
572 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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)
*/
还在加载中灬 2015-02-03
  • 打赏
  • 举报
回复
--写死
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)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧