SUM(当Products.ProductID在(显示哪个产品匹配)SQL中时的大小写)

SUM(当Products.ProductID在(显示哪个产品匹配)SQL中时的大小写),sql,count,case,Sql,Count,Case,这是我当前的SQL语句 SELECT Customers.Customer, SUM(CASE WHEN Products.ProductID in ('ab6','ab5','ab4','ab3','ab2','ab1','abc'.......many others THEN 1 ELSE 0 END) AS Product_10, FROM Customers INNER JOIN Products ON Customers.ProductID = Products.Product

这是我当前的SQL语句

SELECT
  Customers.Customer,
  SUM(CASE WHEN Products.ProductID in ('ab6','ab5','ab4','ab3','ab2','ab1','abc'.......many others THEN 1 ELSE 0 END) AS Product_10,
FROM Customers
INNER JOIN Products ON Customers.ProductID = Products.ProductID
GROUP BY Customers.Customer
所以基本上它会计算这些项目,但我想让结果告诉我它匹配的是哪一个,是全部还是其中一个。这可能吗

SELECT
  Customers.Customer,
  Products.ProductID,
  SUM(CASE WHEN Products.ProductID in ('ab6','ab5','ab4','ab3','ab2','ab1','abc'.......many others THEN 1 ELSE 0 END) AS Product_10,
FROM Customers
INNER JOIN Products ON Customers.ProductID = Products.ProductID
WHERE Products.ProductID in ('ab6','ab5','ab4','ab3','ab2','ab1','abc'......)
GROUP BY Customers.Customer, Products.ProductID
如果您的DBMS支持,您可以通过分组集获得每个客户的总数:

SELECT Customers.Customer, coalesce(Products.ProductID, 'Total'), COUNT(1) as Product_10
FROM Customers
INNER JOIN Products 
    ON Customers.ProductID = Products.ProductID
WHERE Products.ProductID in ('ab6','ab5','ab4','ab3','ab2','ab1','abc'.......many others)
GROUP BY GROUPING SETS ((Customers.Customer, Products.ProductID),(Customers.Customer));

Group by Rollup和Group by Cube可能是您感兴趣的其他构造

大多数数据库都有一种组合字符串的方法。在MySQL中,函数是
Group\u concat()
,因此您可以使用以下方法获得所需内容:

SELECT c.Customer,
       SUM(CASE WHEN p.ProductID in ('ab6','ab5','ab4','ab3','ab2','ab1','abc'.......many others THEN 1 ELSE 0 END) AS Product_10,
       GROUP_CONCAT(DISTINCT p.ProductId)
FROM Customers c INNER JOIN
     Products p
     ON c.ProductID = p.ProductID
GROUP BY c.Customer;

顺便说一句,您的数据模型有问题。您的查询表明客户可以在
Customers
表中有多行。这似乎不正确。
customer
应该是此表上的主键。您缺少一个连接表来映射客户和产品,我称之为
CustomerPr产品

您希望它如何列出与之匹配的产品?单独的行?逗号分隔的列表?以及什么RDBMS?(MSSQL?ORacle、DB2?mySQL?),这将有助于了解您的预期输出。您使用的是什么数据库?
SELECT c.Customer,
       SUM(CASE WHEN p.ProductID in ('ab6','ab5','ab4','ab3','ab2','ab1','abc'.......many others THEN 1 ELSE 0 END) AS Product_10,
       GROUP_CONCAT(DISTINCT p.ProductId)
FROM Customers c INNER JOIN
     Products p
     ON c.ProductID = p.ProductID
GROUP BY c.Customer;