动态SQL列名称

时间:2014-05-14 11:57:15

标签: sql ms-access dynamic

我有一个类似的查询:

SELECT [Week 1].Product, [Week 2].Product, [Week 3].Product, [Week 4].Product, Sum([Week 1].Transaction_Amount), Sum([Week 2].Transaction_Amount), Sum([Week 3].Transaction_Amount), Sum([Week 4].Transaction_Amount) 
FROM [Week 2],[Week 3],[Week 3],[Week 4];

我有70周的数据,名称为[week 1][week 70]

是否可以使[week 1],[Week 2],[Week 3],[Week 4]动态化。

(i,e)有一个主表,我可以在其中有4周名称,如[Week 8], [Week 6], [Week 45], [Week 18],并在我的查询中将[Week 1], [Week 2], [Week 3], [Week 4]替换为上述4

这是MS访问应用程序。对不起,我之前没有提过。

2 个答案:

答案 0 :(得分:0)

更新

在按钮上创建一些VBA代码,动态创建选择查询。 How to build a dynamic query


你可以:

1)更改您的表格结构,以便您拥有所有周的单个表格,例如周(ID,WeekNumber,column1,column2 ......)。然后在Select语句中,您可以添加where子句以使用参数选择您感兴趣的周数。这取决于具有相同结构的所有周表。

2)使用Dynamic SQL构建select语句并替换表名。见sp_executesql

答案 1 :(得分:0)

是的,您可以使用动态查询,然后使用EXECsp_executesql执行查询

以下是伪代码,您可以根据自己的要求即兴创作。

DECLARE @STartCount, @TableCount, @Query, @SubQuery, @WeekTblName
SET @StartCount = 1
SELECT @TableCount = Count(*) FROM Master_Table 
WHILE(@StartCount <= @TableCount)
BEGIN
     SELECT @WeekTblName = Col_Name FROM Master_Table WHERE ID = @StartCount
     SET @SubQuery = @SubQuery + @WeekTblName + ' AS [Week ' + @STartCount + '], '

     SET @StartCount = @StartCount + 1
END

SET @SUBQUERY = LEFT(@SUBQUERY, LEN(@SUBQUERY) - 2);
SET @Query = 'SELECT [Week 1].Product, [Week 2].Product, [Week 3].Product, [Week 4].Product, Sum([Week 1].Transaction_Amount), Sum([Week 2].Transaction_Amount), Sum([Week 3].Transaction_Amount), Sum([Week 4].Transaction_Amount) 
FROM ' + @SubQuery

 EXEC(@Query)

希望这有帮助