我的组织很快将每月收到不同数量的数据集,我们的数据服务团队将每个数据集加载到他们自己的表中,即提交的47个文件,数据库中的47个表。不是一个漂亮的方法,但它会及时改进。提交的年份和月份是表名的一部分。即CMorgNZ322_200701PLD ...... NZ322_200701是表名的可变部分; NZ322X是数据的来源,200701是2007年4月(基于财政年度)
我不想成为编辑SELECT查询的奴隶,只是为了月修改表名,所以我想编写一个存储过程,将表名从一个SELECT查询传递给第二个SELECT查询
这是我第一次尝试使用LOOPS,所以我想知道什么是最好的方法,如何将表名从初始SELECT查询传递到第二个SELECT查询
DECLARE cur_filestoprocess
DECLARE @vcYrMth VarChar(6)
SET @vcYrMth = ‘200701’
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE ‘CMOrg%’ + @vcYrMth + ‘PLD’;
SELECT COLa,
COLb,
COLc,
COLd,
SUM(COLg) AS ‘Activity’,
SUM(COLk) AS ‘Costs’
INTO RegionABC200701Summary
FROM tablename1
GROUP BY COLa,
COLb,
COLc,
COLd
提前,谢谢你的帮助...... ..
答案 0 :(得分:0)
使用动态SQL这可能不是最优雅但你应该明白
SELECT @tableName = TABLE_NAME
FROM #tmp
ORDER BY TABLE_NAME OFFSET @rowNum ROWS
FETCH NEXT 1 ROWS ONLY
<强>被修改强> 以上内容仅适用于SQL 2012及更高版本,如果使用以下版本
,请使用此代码段替换
SELECT @tableName = TABLE_NAME
FROM (
SELECT TABLE_NAME, ROW_NUMBER() OVER (ORDER BY TABLE_NAME) AS RowNumber
FROM #tmp
) a
WHERE RowNumber = @rowNum
使用
startDateTime:Date // showing the day and the starting hour
duration:number // showing the slot duration