[英]how to get multiple columns values in one row with ms access query
我正在为我的公司开发 Access DB,我有一个包含以下列的表:
Co-name 项目名称 Date1 Date2 Date3 Date4 Date5 Date6 Date7 Date8 Payment1 Payment2 Payment3 Payment4 Payment5 Payment6 Payment7 Payment8 Deatil1 Deatil2 Deatil3 Deatil4 Deatil5 Deatil6 Deatil7 Deatil8
我想设计一个查询,包括以下列:
日期(用户可输入范围) SUM【此期间支付的总和】 Co-name Project-Name
任何人都可以帮助我进行此查询吗?
你的问题的答案是标准化。 您当前的设置不会以任何可能的方式帮助您。 相当复杂。
而不是有列,你应该有行。 所以 TOTALS 查询可以发挥它的魔力。 设置应该是,
Co-Name | Project-Name | DateOfPay | Payment | Details
而不是设置这个,
Co-Name | ProjName | Date1 | Payment1| Detail1 | Date2 | Payment2| Detail2 | Date3 | Payment3| Detail3
--------+---------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-------------
AAA | X-1 |22/05/2014 | £ 500 | First |27/07/2014 | £ 100 | Second | | |
BBB | Y-1 |02/08/2014 | £ 300 | First |15/09/2014 | £ 250 | Second |24/10/2014 | £ 400 | Third
CCC | X-1 |07/11/2014 | £ 100 | First | | | | | |
你应该设置为,
Co-Name | Project-Name | DateOfPay | Payment | Details
--------+-------------------+---------------+-----------+-------------
AAA | X-1 | 22/05/2014 | £ 500 | First
AAA | X-1 | 27/07/2014 | £ 100 | Second
BBB | Y-1 | 02/08/2014 | £ 300 | First
BBB | Y-1 | 15/09/2014 | £ 250 | Second
BBB | Y-1 | 24/10/2014 | £ 400 | Third
CCC | Z-1 | 07/11/2014 | £ 100 | First
这样,您的代码将非常简单,
SELECT
[Co-Name],
[Project-Name],
Sum(Payment) As TotalPaid
FROM
theProperTable
WHERE
DateOfPay BETWEEN [EnterTheStartDate:] And [EnterTheEndDate:]
GROUP BY
[Co-Name],
[Project-Name]
如果你不能改变表的结构,你可以通过创建一个返回表的“规范化”版本的查询来伪造它。 将此 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;);
如果 Projects 包含此数据:
那么 ProjectsNormalized 会给你这个数据:
现在,您可以像查询表一样对 ProjectsNormalized 进行查询。
注意:使用 UNION ALL 而不仅仅是 UNION 很重要,因为 UNION 会丢弃重复的记录。 如果您在同一天有两笔具有相同详细信息的等额付款,则您要报告这两笔款项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.