2017-08-15 44 views
2

我想创建一个动态表,我不必每月都更新表名。因为我有相同的查询工作(没有变化,但表名称,格式为(dbo.tablename_201705)至(dbo.tablename_201706)等等。所以我创造了这个DYNAMIC UNION表

DECLARE @TABLE_NAME VARCHAR(20) 
SET @TABLE_NAME ='dbo.GTI_'+left (convert(varchar,dateadd(mm,-3, getdate()-7), 112) ,6) 

DECLARE @GTI_SQL_REPORT VARCHAR(255) 
SET @GTI_SQL_REPORT = 'select*from '[email protected]_NAME. 

,从这里我丢失我不知道下一步 这里下面是我的查询

Select 
    [CountryID], 
    COUNT([Document name]) as [inputcount], 
    MONTH([Creation Date]) AS [Creation Month], 
    Year([Creation Date]) as [Creation Year] 
from 
    dbo.GTI_201705 
WHERE 
    [doc_type_product_type] not in ('CUST') 
    and [Document_Source] in ('FAX','Original') 
group by 
    [CountryID], 
    MONTH([Creation Date]) , 
    Year([Creation Date]) 
order by 
    [CountryID]; 

这样的想法是创建一个动态表,以便该查询将在每个月初运行。预先感谢您

回答

1

您近距离了...您只需要设置@GTI_SQL_REPORTvarchar(max),然后将查询设置为它。 varchar(255)将不足以容纳您的动态字符串。注意底部的print(@GTI_SQL_REPORT)。首先这样做是明智的,所以你会看到你正在执行的SQL。一旦你满意......然后只是评论一下,取消注释EXEC命令。

DECLARE @TABLE_NAME VARCHAR(20) 
SET @TABLE_NAME ='dbo.GTI_'+left (convert(varchar,dateadd(mm,-3, getdate()-7), 112) ,6) 

DECLARE @GTI_SQL_REPORT VARCHAR(max) 
SET @GTI_SQL_REPORT = 
    'Select 
     [CountryID], 
     COUNT([Document name]) as [inputcount], 
     MONTH([Creation Date]) AS [Creation Month], 
     Year([Creation Date]) as [Creation Year] 
    from ' + @TABLE_NAME + ' 
    WHERE 
     [doc_type_product_type] not in (''CUST'') 
     and [Document_Source] in (''FAX'',''Original'') 
    group by 
     [CountryID], 
     MONTH([Creation Date]) , 
     Year([Creation Date]) 
    order by 
    [CountryID]; ' 

print(@GTI_SQL_REPORT) 
--exec(@GTI_SQL_REPORT) 
+0

非常感谢您......有一个愉快的一天 –

+0

这是否制定出你@issamozeir – scsimon

+0

非常感谢你是它没有,但我的情况下,我想报告比一段更问题。如dbo.GTI_201704,GTI_201705和GTI_201706的报告,以查看类似报告中的趋势,如累积报告。 –