SQL - 用 Where 计数

SQL - Counting with Where

我有一个非常简单的 SQL 问题。我有一个包含以下列的数据库 table:

  1. 零件号

  2. 销售类型(为简单起见,将其称为销售类型 1,2,3,4,5)

我希望编写一个查询,给出以下三列:

我可以使用类似于下面代码的代码轻松地显示三列中的两列,但我不知道如何让所有三列同时显示。

SELECT 
    PartNumber AS PartNumber,
    COUNT(*) AS SalesCount
FROM 
    SalesTable
WHERE 
    SalesType = 2
GROUP BY 
    I.PartNumber

我猜这可能很容易 - 我是一个 SQL 菜鸟,这是我的第一个 post!

非常感谢任何帮助!

未经测试,但您想要这样的东西:

 SELECT PartNumber, sum(case when SalesType=2 then 1 else 0) as Type2SalesCount,
    sum(case when SalesType<>2 then 1 else 0) as NoNType2SalesCount
    FROM SalesTable
    Group by PartNumber

听起来你要找的是 conditional count

SELECT 
    PartNumber, 
    SUM(CASE WHEN SalesType = 2 THEN 1 ELSE 0 END) as SaleTypeTwoCount,
    SUM(CASE WHEN SalesType <> 2 THEN 1 ELSE 0 END) as SalesOtherCount
FROM 
    SalesTable
GROUP BY
    PartNumber

实际上 运行 还没有,但是像这样的东西应该有用...

SELECT
    PartNumber,
    COUNT(CASE WHEN SalesType = 2 THEN 1 END) Count2,
    COUNT(CASE WHEN SalesType <> 2 THEN 1 END) CountNot2
FROM
   SalesTable
GROUP BY
   PartNumber;

请注意,COUNT(expression) 只计算非 NULL,而 COUNT(*) 计算所有行。

...

CASE WHEN SalesType = 2 THEN 1 END

...等同于...

CASE WHEN SalesType = 2 THEN 1 ELSE NULL END

...并且当 SalesType <> 2 不计算时将导致 NULL。

您可以使用案例例如: saletype= case when saletype == 2 then count(saletype) when saletype <> 2 then count(saletype)