创建汇总的SQL报告,其中列基于表列表

问题描述

不确定是否可以,但我希望有人能指出我正确的方向。

我有一个数据库,可以在记录更改阶段审核日志。我需要做的是将其合并到一份报告中,该报告通过记录ID为我提供每个阶段的最早审核记录。也就是说,我最终得到的报告看起来像这样。

+----+---------+---------+---------+
| ID | Stage1  | Stage2  | Stage3  |
+----+---------+---------+---------+
|  1 | 1/10/20 | 1/10/20 | 3/10/20 |
|  2 | 1/10/20 | 2/10/20 | 4/10/20 |
|  3 | 2/10/20 | 2/10/20 | 3/10/20 |
+----+---------+---------+---------+

我可以使用多个选择查询来执行此操作,但是由于我的阶段存储在表中,所以我想知道是否有一种动态构建此方法方法。这也将在将来最大程度地减少维护。

我的“ Audit_Log”表具有以下列:

  • RecordID
  • 阶段
  • 事件日期

我的“阶段”存储在名为“阶段”列“阶段”的表中。

任何建议将不胜感激。 谢谢

解决方法

您可以尝试使用运算符 TRANSFORM

TRANSFORM <aggregate-function-expression>
  <select-statement>
PIVOT <expression>
[IN (<column-value-list>)]

其中<aggregate-function-expression>是使用聚合函数之一创建的表达式,

<select-statement>包含GROUP BY子句,<column-value-list>是期​​望由PIVOT表达式返回的必需值的列表,用引号括起来并用逗号分隔。 (您可以使用IN子句强制列的输出顺序。)

如果RecordID和Stage有一个event_date的值:

TRANSFORM Max(Audit_Log.Event_Date)AS stage_date
SELECT Audit_Log.RecordID
FROM Audit_Log
GROUP BY Audit_Log.RecordID
PIVOT Audit_Log.Stage