2017-08-15 79 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的報告,以查看類似報告中的趨勢,如累積報告。 –