你需要几个不同的步骤。
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倍的一个片段:
你想回去多少天,什么定义第1天? –
我们希望查看一个月 - 例如9月1日至9月30日 –