我有一个报告服务项目,我负责根据哪个"开始日期"来显示来自数据库中不同表的数据。用户在参数中选择。
如果用户选择"开始日期"成为" 01-01-2016"那么数据集查询中的表名应该是" userdata_2016"和" userdata_2017"如果"开始日期"设置为01-01-2017。
我该如何做到这一点?
答案 0 :(得分:2)
您可以使用表值函数来联合所有年份表,并将@start_date
作为变量传递:
SELECT * FROM userdata_2016 WHERE Year(@start_date) = 2016
UNION ALL
SELECT * FROM userdata_2017 WHERE Year(@start_date) = 2017
另一种选择是使用stored procedure
:
DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'SELECT * FROM userdata_' + CAST(YEAR(@StartDate) AS nvarchar(4))
EXEC (@sqlCommand)
答案 1 :(得分:0)
奇怪的是,表格按年份分开,除非每个表格中的数据不同,否则不会合并到一个表格中。 Union all是一种方法,但如果数据不同或者您不想加载所有表中的所有数据,则可以使用 IF ... ELSE 语句来包含每个查询
举个例子:
IF YEAR(@startDate) = 2016
SELECT * FROM userdata_2016;
IF YEAR(@startDate) = 2017
SELECT * FROM userdata_2017;
ELSE
SELECT * FROM blah;
不需要其他声明,但我将其用于演示目的。