select * from fram.100001_tab
select * from fram.100002_tab
select * from fram.100002_tab
表fram.100001_tab的列:
数据
wfid wtid rectime [WTUR.WSpd.Ra.F32] [WTUR.PwrReact.Ra.F32AVG]
100001 100001001 2014-07-20 14:10:00.000 7.37 5.54
100001 100001001 2014-07-20 14:20:00.000 7.28 5.66
100001 100001001 2014-07-20 14:30:00.000 7.35
100001 100001001 2014-07-20 14:40:00.000 7.71
100001 100001001 2014-07-20 14:50:00.000 7.95
100001 100001001 2014-07-20 15:00:00.000 7.83
表fram.100002_tab的列:
数据
wfid wtid rectime [WTUR.WSpd.Ra.F32] [WTUR.PwrReact.Ra.F32]
100002 100002001 2014-10-07 11:20:00.000 8.32 7.32
100002 100002001 2014-10-07 11:30:00.000 7.57 6.10
100002 100002001 2014-10-07 11:40:00.000 7.56 6.72
100002 100002001 2014-10-07 11:50:00.000 7.56 6.10
100002 100002001 2014-10-07 12:00:00.000 6.45 5.10
表fram.100003_tab的列:
数据
wfid wtid rectime [WTUR.PwrAt.Ra.F32] [WTUR.PwrReact.Ra.F32] [WTUR.PwrReact.Ra.F32MAX]
100003 100003001 2014-11-12 11:00:00.000 9.36 7.10 11.71
100003 100003001 2014-11-12 13:30:00.000 9.44 7.10 10.92
100003 100003001 2014-11-12 13:40:00.000 9.42 6.99 11.22
100003 100003001 2014-11-12 13:50:00.000 9.22 7.10 10.78
100003 100003001 2014-11-12 14:00:00.000 9.05 7.32 10.47
想查询出的数据如下显示:可否实现? (也可能传入有fram.100004_tab, fram.100005_tab里面不知道有多少列。)
wfid wtid rectime [WTUR.WSpd.Ra.F32] [WTUR.PwrReact.Ra.F32] [WTUR.PwrReact.Ra.F32MAX] [WTUR.PwrReact.Ra.F32AVG]
100001 100001001 2014-07-20 14:10:00.000 7.37 5.54
100001 100001001 2014-07-20 14:20:00.000 7.28 5.66
100001 100001001 2014-07-20 14:30:00.000 7.35
100001 100001001 2014-07-20 14:40:00.000 7.71
100001 100001001 2014-07-20 14:50:00.000 7.95
100001 100001001 2014-07-20 15:00:00.000 7.83
100002 100002001 2014-10-07 11:20:00.000 8.32 7.32
100002 100002001 2014-10-07 11:30:00.000 7.57 6.10
100002 100002001 2014-10-07 11:40:00.000 7.56 6.72
100002 100002001 2014-10-07 11:50:00.000 7.56 6.10
100002 100002001 2014-10-07 12:00:00.000 6.45 5.10
100003 100003001 2014-11-12 11:00:00.000 9.36 7.10 11.71
100003 100003001 2014-11-12 13:30:00.000 9.44 7.10 10.92
100003 100003001 2014-11-12 13:40:00.000 9.42 6.99 11.22
100003 100003001 2014-11-12 13:50:00.000 9.22 7.10 10.78
100003 100003001 2014-11-12 14:00:00.000 9.05 7.32 10.47
------解决思路----------------------
合并这几个表结果?
看你的情况只能动态执行了
------解决思路----------------------
列数都不固定吗?那些列有MAX 和AVG的也是查出来的,还是还需要算一下
------解决思路----------------------
DECLARE @SQL NVARCHAR(MAX)你参考下,应该可以~~
DECLARE @MAX INT
DECLARE @TABLE TABLE(NA NVARCHAR(128),CO INT)
INSERT INTO @TABLE
SELECT T1.NAME,COUNT(T2.id)CO FROM SYS.SYSOBJECTS T1
JOIN SYS.SYSCOLUMNS T2 ON T1.id=T2.id
WHERE T1.[name]IN('fram.100001_tab','fram.100002_tab','fram.100003_tab')
GROUP BY T1.[name]
;SELECT @SQL='SELECT * FROM ['+NA+'] WHERE 1=0 ',@MAX=CO FROM(
SELECT TOP 1 NA,CO FROM @TABLE
ORDER BY CO DESC
)T
SELECT @SQL=@SQL+'UNION ALL SELECT *'+REPLICATE(',NULL',@MAX-CO)+' FROM ['+NA+']' FROM @TABLE
--PRINT @SQL
EXEC(@SQL)
------解决思路----------------------
--用到的表
;WITH tables(table_name) AS (
SELECT 'fram.100001_tab' UNION ALL
SELECT 'fram.100002_tab' UNION ALL
SELECT 'fram.100003_tab' UNION ALL
SELECT 'fram.100001_tab'
)
SELECT *
INTO #tables
FROM tables
--表各自的字段
SELECT t.table_name,
c.name column_name,
c.column_id
INTO #columns
FROM #tables t
JOIN sys.columns c
ON c.object_id = OBJECT_ID(t.table_name)
--所有字段全集
SELECT column_name,
ROW_NUMBER() OVER(ORDER BY MIN(column_id), MIN(table_name)) column_id
INTO #outColumns
FROM #columns
GROUP BY column_name
--各表用NULL补齐字段
SELECT t.table_name,
ISNULL(c.column_name,'NULL AS '+oc.column_name) AS column_name,
oc.column_id
INTO #inColumns
FROM #tables t
JOIN #outColumns oc
ON 1=1
LEFT JOIN #columns c
ON t.table_name = c.table_name
AND oc.column_name = c.column_name
/*
SELECT * FROM #tables
SELECT * FROM #columns
SELECT * FROM #outColumns
SELECT * FROM #inColumns
*/
DECLARE @sql nvarchar(max)
;WITH tableSQL AS (
SELECT 'SELECT ' +
Stuff((SELECT ','+column_name
FROM #inColumns ic
WHERE ic.table_name = t.table_name
for xml path('')
),
1,1,'') +
' FROM ' + t.table_name AS sql
FROM #tables t
)
SELECT @sql = Stuff((SELECT ' UNION ALL '+sql
FROM tableSQL ic
for xml path('')
),
1,11,'')
PRINT @sql