繁体   English   中英

如何使用ms access查询在一行中获取多列值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM