一行中的项目计数,但另一行中没有

时间:2019-03-22 13:48:56

标签: sql ms-access

我有一个访问表,该访问表的一列中包含组列表,然后另一列中包含产品列表。我想生成一份报告,以显示所有产品中有多少组,至少有1个产品中有多少组。在给定的表中,我有多达6种产品,并且有5,000多个唯一组。
下面是我要寻找的示例:

表格:

Group | Product  
AAAA  | 123456  
AAAA  | 234578  
AAAA  | 456789  
AAAA  | 789012  
BBBB  | 123456  
BBBB  | 234578  
BBBB  | 456789  
CCCC  | 123456  
CCCC  | 234578  
CCCC  | 456789  
CCCC  | 789012  

预期结果:

Product 123456 and 234578 and 456789 and 789012 has 2 groups  
Product 123456 or 234578 or 456789 or 789012 or has 3 groups  

我尝试了以下查询,但仅当它是一种产品或另一种产品时才适用,而不能同时用于两者。我正在寻找产品x,产品y和产品z而不是产品a中的组。

  SELECT group  
  FROM GroupProducts  
  WHERE   
         product in (’123456’,’2345678’,’456789’)  
         and product not in (’789012’)

2 个答案:

答案 0 :(得分:0)

尝试使用Count并按Product分组:

SELECT Count(group), Product
FROM GroupProducts
WHERE
product in ('123456','2345678','456789')
and product not in ('789012')
GROUP BY product

这假设您的表没有重复项,否则您必须先将其过滤掉

答案 1 :(得分:0)

  

我想生成一份报告,以显示所有产品中有多少组

假设没有重复的记录,以下查询应返回与数据集中所有产品相关联的所有组的集合:

select t.group from YourTable t group by t.group
having count(t.group) = 
(
    select count(*) from (select distinct u.product from YourTable u)
)

您可以通过简单地用select count(*)查询将以上内容括起来来对这些组进行计数:

select count(*) from
(
    select t.group from YourTable t group by t.group
    having count(t.group) = 
    (
        select count(*) from (select distinct u.product from YourTable u)
    )
)
  

至少有1种产品有多少组

这很容易,因为您可以简单地选择数据集中不同组的数量:

select distinct t.group from YourTable t

然后可以按照与前面所述相同的方式进行计数:

select count(*) from 
(
    select distinct t.group from YourTable t
)

在上述所有示例中,将YourTable的所有实例替换为表名。