2011-10-05 47 views
0

我们目前有100个临时表,每天载入中间表。SQL Server - 数据透视:计数/报告记录插入100个临时表中的记录数

我正在努力编写一个查询 - 它给了我排序的PIVOT结果 - 显示在日期前插入登台表的记录数。

Name of tables    Day 1 Day 2 Day 3 Day 4 Day 5 
-------------------------------------------------------------- 
AAAAA      100  50  30 60 90 

问候

+0

你想回去多少天,什么定义第1天? –

+0

我们希望查看一个月 - 例如9月1日至9月30日 –

回答

0

你需要几个不同的步骤。

DATEDIFF(DAY, <timestamp>, getDate())会得到你前一天的记录数。

使用SUM内侧箱,然后你可以这样做......

SELECT 
    'AAAA'                  AS TableName, 
    SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 1 THEN 1 ELSE 0 END) AS Day1, 
    SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 2 THEN 1 ELSE 0 END) AS Day2, 
    SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 3 THEN 1 ELSE 0 END) AS Day3, 
    SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 4 THEN 1 ELSE 0 END) AS Day4, 
    etc, etc 
FROM 
    AAAA 

UNION ALL 

SELECT 
    'BBBB'                  AS TableName, 
    SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 1 THEN 1 ELSE 0 END) AS Day1, 
    SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 2 THEN 1 ELSE 0 END) AS Day2, 
    SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 3 THEN 1 ELSE 0 END) AS Day3, 
    SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 4 THEN 1 ELSE 0 END) AS Day4, 
    etc, etc 
FROM 
    BBBB 

UNION ALL 

etc, etc 

这确实需要的代码重演您所查询的每个表。但我认为无论如何,你都会以这种或那种方式阻止这种做法。

另一种方法是在每个表上放置一个触发器,并且在插入/删除数据时,使用新的详细信息更新跟踪表。这涉及写100个触发器而不是100个联合。

无需编写动态SQL,我不知道这样做的任何其他根本不同的方式来aboid编写代码100倍的一个片段: