【问题标题】:Access SQL count() query访问 SQL count() 查询
【发布时间】:2019-01-04 20:40:07
【问题描述】:

此任务应在 Access 中使用 1 个查询完成。 有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 字段;必须填写 2 家或更多公司 country, supplierNumber 字段。

所以我有一个直截了当的想法:

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

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

【问题讨论】:

  • 那么,您对此有何尝试?
  • 我写过我试图用我上面描述的结构创建查询,但都是徒劳的。
  • 为什么要投反对票?首先,发表我的尝试是没有用的,因为它绝对不起作用,其次,我准确地描述了我在尝试过程中遇到的结构和错误。最后,我在网上彻底搜索了类似的例子,但没有成功,甚至不知道这个任务应该实现的原理。

标签: sql ms-access count


【解决方案1】:

考虑使用聚合级查询加入您的单元级表:

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

【讨论】:

  • 哇,非常聪明的想法,而且似乎效果很好,但是每个国家/地区的结果表中都填满了所有字段!
【解决方案2】:

假设address.supplierid 总是用有效的supplierid 填充,而supplier.nameid 总是用有效的nameid 填充,您可以使用UNION 查询来获得所需的结果,如下所示。第一部分为只有一个供应商的国家/地区选择国家和供应商/联系人,第二部分选择具有多个供应商的所有国家(具有多个地址的国家/地区):

SELECT a.country, 1 AS supplierNumber, s.supplierName, c.firstname, c.lastname, c.phone
FROM (address AS a INNER JOIN supplier AS s ON a.supplierid = s.supplierid) 
  INNER JOIN contactname AS c ON s.nameid = c.nameid
WHERE ((a.country) In (SELECT country FROM address GROUP BY country HAVING Count(*)=1))
UNION
SELECT a.country, Count(*), Null, Null, Null, Null
FROM address AS a GROUP BY country HAVING Count(*)>1

【讨论】:

  • WolfgangK,工作完美,太棒了……我非常感谢你! sql 中有这么多隐含的特性可以使用!
猜你喜欢
  • 2014-05-24
  • 2021-10-28
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2012-12-26
  • 2011-12-11
  • 1970-01-01
  • 2011-02-15
相关资源
最近更新 更多