如果您无法更改表的结构,您可以通过创建返回“规范化”版本表的查询来伪造它。将此 SQL 保存为查询,命名为 ProjectsNormalized:
(SELECT [Co-Name], [Project-Name], Date1 As DateOfPay, Payment1 As Payment, Detail1 As Details FROM Projects WHERE Date1 Is Not Null;)
UNION ALL
(SELECT [Co-Name], [Project-Name], Date2 As DateOfPay, Payment2 As Payment, Detail2 As Details FROM Projects WHERE Date2 Is Not Null;)
UNION ALL
(SELECT [Co-Name], [Project-Name], Date3 As DateOfPay, Payment3 As Payment, Detail3 As Details FROM Projects WHERE Date3 Is Not Null;)
UNION ALL
(SELECT [Co-Name], [Project-Name], Date4 As DateOfPay, Payment4 As Payment, Detail4 As Details FROM Projects WHERE Date4 Is Not Null;);
如果项目包含此数据:
然后 ProjectsNormalized 会给你这个数据:
现在您可以对 ProjectsNormalized 进行查询,就像它是一个表一样。
注意:使用 UNION ALL 而不仅仅是 UNION 很重要,因为 UNION 会丢弃重复记录。如果您在同一天有两笔相等的付款且详细信息相同,则您希望同时报告这两笔。