我们目前有100个临时表,每天都会加载。
我正在努力编写一个查询 - 它给我排序PIVOT结果 - 显示按日插入登台表的记录数。
Name of tables Day 1 Day 2 Day 3 Day 4 Day 5
--------------------------------------------------------------
AAAAA 100 50 30 60 90
此致
答案 0 :(得分:0)
您需要执行几个不同的步骤。
DATEDIFF(DAY, <timestamp>, getDate())
会在几天前为您提供记录。
在SUM中使用CASE,然后可以执行类似......
的操作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的情况下,我不知道有任何其他根本不同的方法来禁止编写代码片段100次......