SQL Server - Pivot:计数/报告在100个临时表中插入的记录数

时间:2011-10-05 13:38:57

标签: sql sql-server

我们目前有100个临时表,每天都会加载。

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

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

此致

1 个答案:

答案 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次......