我需要比较Access SQL中的COUNT()结果,并根据结果执行函数

我需要比较Access SQL中的COUNT()结果,并根据结果执行函数,sql,select,count,max,distinct,Sql,Select,Count,Max,Distinct,我有以下表格: VENDOR: PRODUCT: ITEM: STORE: - VENDOR_ID - PRODUCT_ID - ITEM_ID - STORE_ID - VENDOR_NAME - PRODUCT_DESC - STORE_ID - STORE_NAME - VENDOR_ID - PRODU

我有以下表格:

   VENDOR:          PRODUCT:           ITEM:             STORE:
-  VENDOR_ID     -  PRODUCT_ID      -  ITEM_ID        -  STORE_ID
-  VENDOR_NAME   -  PRODUCT_DESC    -  STORE_ID       -  STORE_NAME
                 -  VENDOR_ID       -  PRODUCT_ID     -  STORE_LOCATION
                                    -  ITEM_PRICE
供应商表存储关于产品供应商的信息,产品表存储关于产品的信息,项目表本质上是商店的库存,每个库存项目都有一个记录。如果物料库存中有多个相同的产品,则该产品具有不同的物料ID,但物料ID和物料ID是主键。商店存储商店信息:D

我想列出向拥有最大产品系列的商店提供产品的供应商的名称。因此,我想我需要使用计数函数来计算每个商店的商品记录中不同的商品ID的数量

我真的不知道该如何开始,我希望能得到一些帮助

这就是我到目前为止所做的:

SELECT DISTINCT VENDOR.VENDOR_NAME AS [Vendor Name]
FROM VENDOR, PRODUCT, ITEM, STORE
WHERE STORE.STORE_ID 
IN (SELECT STORE_ID 
FROM ITEM);
这将返回所有供应商,但我需要在其中添加COUNT或MAX函数,但我不确定如何执行该操作。任何帮助都将不胜感激

SELECT V.VENDOR_NAME, COUNT(I.PRODUCT_ID)
FROM ((VENDOR AS V 
INNER JOIN PRODUCT AS P ON V.VENDOR_ID = P.VENDOR_ID) 
INNER JOIN ITEM AS I ON P.PRODUCT_ID = I.PRODUCT_ID) 
INNER JOIN STORE AS S ON I.STORE_ID = S.STORE_ID 
WHERE S.STORE_NAME = 'Store Name"
GROUP BY V.VENDOR_NAME
ORDER BY COUNT(I.PRODUCT_ID) DESC

上面的查询将获得供应商的名称和产品ID的计数。我把WHERE子句放在那里,这样您就可以指定某个存储。如果您想要所有门店,请删除WHERE。

要将其分解,您首先需要获得“产品范围最大的门店”,因为access不允许
计数(不同的
),您需要使用子查询在计数前获得不同的记录:

SELECT Z.VENDOR_NAME AS VENDOR_NAME
FROM
(
    SELECT B.PRODUCT_ID,A.STORE_ID 
    FROM
    (
      SELECT A.STORE_ID,MAX(COUNT_PRODUCTS_PER_EACH_STORE) AS MAX_COUNT_PRODUCTS_PER_EACH_STORE
      FROM
      (
       SELECT STORE_ID,COUNT(DISTINCT PRODUCT_ID) AS COUNT_PRODUCTS_PER_EACH_STORE
       FROM ITEM
       GROUP BY STORE_ID
      ) A
    ) A,
    ITEM B
    WHERE A.STORE_ID = B.STORE_ID
) X,
PRODUCT Y,
VENDOR Z
WHERE X.PRODUCT_ID = Y.PRODUCT_ID
  AND Y.VENDOR_ID = Z.VENDOR_ID;
SELECT  TOP 1 
        Store_ID,
        COUNT(Product_ID) AS StoreProducts
FROM    (   SELECT  DISTINCT Store_ID, Product_ID
            FROM    Item
        ) i
GROUP BY Store_ID
ORDER BY COUNT(Product_ID) DESC; 
这将返回具有最多不同产品的商店的商店标识

然后,您需要获取向任何给定商店提供产品的所有供应商ID(以及所提供产品的数量,如果需要)

这将根据门店ID和他们在该门店的商品数量为您提供所有供应商

然后,您可以组合两个查询:

SELECT  Store.Store_ID, 
        Store.Store_Name,
        TopStore.StoreProducts,
        Vendor.Vendor_ID, 
        Vendor.Vendor_Name, 
        COUNT(Product.Product_ID) AS ItemsSuppliedToStore
FROM    ((((SELECT  TOP 1 
                    Store_ID, 
                    COUNT(Product_ID) AS StoreProducts
            FROM    (   SELECT  DISTINCT Store_ID, Product_ID
                        FROM    Item
                    ) i
            GROUP BY Store_ID
            ORDER BY COUNT(Product_ID) DESC
        ) AS TopStore
        INNER JOIN Store
            ON Store.Store_ID = TopStore.Store_ID)
        INNER JOIN Item
            ON Item.Store_ID = TopStore.Store_ID)
        INNER JOIN Product
            ON item.Product_ID = Product.Product_ID)
        INNER JOIN Vendor
            ON Vendor.Vendor_ID = Product.Vendor_ID
GROUP BY Store.Store_ID, Store.Store_Name, TopStore.StoreProducts, 
         Vendor.Vendor_ID, Vendor.Vendor_Name;

我已经发布了下面的解决方案。如果它对你有用,请尝试一下。可能想解释一下你做了什么。因此OP有更多的理解。我使用Access SQL,我认为JOIN函数在这方面不起作用。我尝试了内部JOIN,但它抛出了一个语法错误。你知道我如何克服这个问题吗?我修改了我的答案,以便它在Access.Access要求JOIN语句中有一些括号。
SELECT  Store.Store_ID, 
        Store.Store_Name,
        TopStore.StoreProducts,
        Vendor.Vendor_ID, 
        Vendor.Vendor_Name, 
        COUNT(Product.Product_ID) AS ItemsSuppliedToStore
FROM    ((((SELECT  TOP 1 
                    Store_ID, 
                    COUNT(Product_ID) AS StoreProducts
            FROM    (   SELECT  DISTINCT Store_ID, Product_ID
                        FROM    Item
                    ) i
            GROUP BY Store_ID
            ORDER BY COUNT(Product_ID) DESC
        ) AS TopStore
        INNER JOIN Store
            ON Store.Store_ID = TopStore.Store_ID)
        INNER JOIN Item
            ON Item.Store_ID = TopStore.Store_ID)
        INNER JOIN Product
            ON item.Product_ID = Product.Product_ID)
        INNER JOIN Vendor
            ON Vendor.Vendor_ID = Product.Vendor_ID
GROUP BY Store.Store_ID, Store.Store_Name, TopStore.StoreProducts, 
         Vendor.Vendor_ID, Vendor.Vendor_Name;