2014-12-05 58 views
1

我是新来的,对于SQL和Access来说很新。我所拥有的是一张名为'公寓'的表格,其中包含一串行信息。它有大厦,信件,SSN,LeaseDate,MonthlyRent,MoveinCondition和MoveoutCondition。对于我的班级,我必须弄清表格中的所有信息,并根据建筑物,信件和号码显示出租某间特定公寓的次数。使用日期范围访问2010 SQL查询

我到目前为止是这样的:

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

这几乎是正确地显示它!但有一个问题。同一天可以有多个租户租用,但只能算作一个主动租约。

所以我做了什么检查是这样的:

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

现在,这其实不通过建设,信和集团租赁日期和统计上的日期的租约数量。

但是,如何显示它,以便它不计算这些重复项,并添加某种位置或有声明来指定此项。

例如:如果公寓1A已于14年1月1日,而是由4个租户,并且还通过13年1月1日3个租户租用,应该只显示NumberLeased为2时,不7.

回答

1

以查询为单位,为每个公寓租赁期限提供一行。根据您的例子,下面的查询会凝结为每个4公寓1A tennants为14年1月1日LeaseDate的行成单行:

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; 
+0

谢谢,可惜它说,在计数syntas错误(子。*) – 2014-12-05 02:32:58

+0

真棒三江源!所以子查询的工作方式是在本质上在查询中创建查询并为其分配一个名称,然后在beginnign select语句和group中的参数前使用该名称 - sub - ? – 2014-12-05 02:43:21

+0

'AS sub'是我如何为该子查询分配一个别名。然后通过使用该别名限定字段名称来引用这些字段。将数据源别名化对于子查询尤其有用。但是别名基本上可以在任何时候使用,即使有一个非常简单的单一表“SELECT”,例如'SELECT y。* FROM YourTable AS y;' – HansUp 2014-12-05 02:55:24