访问SQL count()查询

时间:2018-07-27 17:18:59

标签: sql ms-access count

此任务应在带有1个查询的Access中完成。 有3个表格:

  • address {id, address, city, postalcode, country, supplierid}
  • supplier {supplierID, supplierName, nameid}
  • contactname {nameid, firstname, lastname, phone}

我需要创建查询,结果如下表所示:

{country, supplierNumber, supplierName, firstname, lastname, phone}

supplierNumber是特定国家/地区的公司数量。

对于只有1个公司的国家(country, supplierName, firstname, lastname, phone)必须填写;包含两个或两个以上公司的country, supplierNumber字段。

所以我有个简单的主意:

SELECT COUNT() ... 
FROM ... INNER JOIN ... ON ...
HAVING COUNT() ...
GROUP BY ...
UNION
...

但是我遇到了很多问题。 GROUP BY要求SELECT由于COUNT()而需要的所有字段; UNION在表中需要使用相等数量的字段,因此第二个表可能应该用NULL字段或其他内容进行补充。因此,我不知道应该以哪种方式执行此任务。请帮帮我。

2 个答案:

答案 0 :(得分:1)

假设address.supplierid总是填充有效的supplierid,而supplier.nameid总是填充有效的nameid,则可以使用{{1 }}如下查询。第一部分选择一个供应商所在的国家/地区和供应商/联系人,第二部分选择一个供应商以上的所有竞争(地址多个的国家):

UNION

答案 1 :(得分:0)

考虑通过汇总级别查询将您的单位级别表联接:

SELECT a.country, agg.supplierNumber, s.supplierName, c.firstname, c.lastname, c.phone
FROM ((supplier s
INNER JOIN contact c ON c.nameid = s.nameid)
INNER JOIN address a ON s.supplierid = a.supplierid)
LEFT JOIN 
   (SELECT sub_a.country, COUNT(*) AS supplierNumber
    FROM address sub_a
    INNER JOIN supplier sub_s ON sub_a.supplierid = sub_s.supplier_id
    GROUP BY sub_a.country) AS agg
ON agg.country = a.country