【问题标题】:Access 2010 SQL Query with Date Range使用日期范围访问 2010 SQL 查询
【发布时间】:2014-12-05 10:33:37
【问题描述】:

我是新来的,对 SQL 和 Access 很陌生。我所拥有的是一个名为 'Apartments' 的表,其中包含一堆信息。它有 Building、Letter、SSN、LeaseDate、MonthlyRent、MoveinCondition 和 MoveoutCondition。对于我的班级,我必须根据表格中的所有信息以及 Building、Letter 和 NumberLeased 显示的信息,计算出特定公寓出租了多少次。

到目前为止,我所拥有的是:

SELECT Building, Letter, COUNT(*)  
FROM Apartments  
GROUP BY Building, Letter;

这显示它几乎正确!但是有一个问题。在同一日期租约可以有多个租户,但它只算作一个有效租约。

所以我做的检查是这样的:

SELECT Building, Letter, LeaseDate, COUNT(*)  
FROM Apartments  
GROUP BY Building, Letter, LeaseDate;

现在这实际上是按建筑物、字母和租赁日期分组,并计算该日期的租赁数量。

但是我如何显示它以便它不计算这些重复项,并添加某种 where 或 have 语句来指定它。

例如:如果公寓 1A 于 2014 年 1 月 1 日由 4 个租户租用,并且 1/1/13 由 3 个租户租用,则应仅将 NumberLeased 显示为 2,而不是 7 .

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    从一个查询开始,该查询为每个公寓租期提供一行。根据您的示例,以下查询会将 1/1/14 LeaseDate 的 4 个公寓 1A 租户中的每一个的行压缩为一行:

    SELECT DISTINCT Building, Letter, LeaseDate
    FROM Apartments
    

    然后将其用作子查询并将租约计数基于其不同的行:

    SELECT sub.Building, sub.Letter, Count(*) AS NumberLeased
    FROM
        (
            SELECT DISTINCT Building, Letter, LeaseDate
            FROM Apartments
        ) AS sub
    GROUP BY sub.Building, sub.Letter;
    

    【讨论】:

    • 谢谢,不幸的是它说 Count(sub.*) 中存在语法错误
    • 太棒了,谢谢!因此,子查询的工作方式本质上是在查询中创建查询并为其分配一个名称,然后在 beginnign select 语句和 group by 中的参数前面使用该名称 - sub -?
    • AS sub 是我为该子查询分配别名的方式。然后通过使用该别名限定字段名称来引用字段。为数据源设置别名对于子查询特别有用。但是别名基本上可以随时使用,即使是很简单的单表SELECT比如SELECT y.* FROM YourTable AS y;
    • 嘿,伙计,如果你知道答案,另一个问题会导致这个问题:如果我有另一个名为 Apartment 的表,它有一个所有 AllApartments 的列表,但在之前的 Apartment 表中只有已出租的公寓,如何连接两张表,以便合并所有未出租的公寓。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多