【问题标题】:Distinct Count & Distinct Count with Condition in a Single Query单个查询中的不同计数和带条件的不同计数
【发布时间】:2021-05-21 13:40:53
【问题描述】:
Model ID Work Order Number Purchase Order Lines
123 x 5450
123 x 5400
123 y 5200
123 y 5500

我的 SQL Server 数据库中有类似上表的内容。我想要一个查询来返回不同的模型 ID、不同的工作订单计数以及采购订单行不是 5450 或 5400 的不同工作订单计数。

从上表查询的结果应该如下:

Model ID Distinct Work Orders Distinct Work Orders excluding PO lines 5400 and 5450
123 2 1

有没有办法在不使用多个子查询或临时表的情况下做到这一点?

【问题讨论】:

标签: sql sql-server count subset distinct


【解决方案1】:

我怀疑您实际上可能指的是没有 5400 或 5450 的工单,即使它们有其他值。

您可以通过不同的方式做到这一点:

select count(distinct workorder),
       (count(distinct workorder) - 
        count(distinct case when purchaseorder not in (5400, 5450) then workorder end)
       )
from t;

【讨论】:

  • 是的,这将非常有用!但是,在我公司的情况下,如果在采购订单上使用 5400 或 5450,那么另一个可以伴随它......但这是一个非常好的观察结果,总有一天会对我有用!
  • @Omar123456789 。 . .问题是采购订单上是否有任何其他代码。
【解决方案2】:

您可以将 COUNT DISTINCT 与 case 语句一起使用。像这样的...

SELECT COUNT(DISTINCT ColumnName)
      , COUNT(DISTINCT ( CASE WHEN SomeCondition = True THEN ColumnName ELSE NULL END)) FilteredDistCount 
FROM TableName 

【讨论】:

  • CASE 表达式,不是语句。
  • 您先生是个天才!谢谢,我今天学到了新东西。
猜你喜欢
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
相关资源
最近更新 更多