--写死
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)
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)
解决方案 »
- 急呀急呀~~~!!!sql 2000 又出错了
- 请教条SQL语句,请进来帮忙!
- 请教一个触发器的问题
- 紧急求助,明天有MCDBA的考试!在线等~~
- 数据库刚启动 客户端查询缓慢
- 大表建立replication,每个表都百万行以上
- SQL数据库超过4G就插不入了,也是PRIMARY 文件组分配空间的问题
- 作了update,如何恢复update前的数据,根据log可以吗?
- select 问题,拜托各位大侠!
- SQLserver存储过程取数据,作业每小时执行后,出现大量重复数据,求大神解答~~~
- 我电脑能远程桌面连接到服务器,但我电脑上的SqlServer数据库不能访问服务器数据库是什么原因
- 数据表筛选问题
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)
*/