【问题标题】:Running count of duplicate values重复值的运行计数
【发布时间】:2020-11-24 05:43:35
【问题描述】:

我有一张表格,显示托盘和这些托盘上的产品数量(“单位”)。由于多个可能的缺陷代码,单个托盘可能有多个记录。这意味着当我尝试对所有托盘上的总单位求和时,同一个托盘可能会被计算多次,这是不可取的。我想(但不知道如何)添加一个运行计数列以显示特定托盘 ID 出现了多少次,以便我可以过滤掉计数大于 1 的任何记录:

| Pallet_ID | Units | Defect_Code | COUNT |
+-----------+-------+-------------+-------+
| A1        | 100   | 03          | 1     |
| A1        | 100   | 05          | 2     |
| B1        | 95    | 03          | 1     |
| C1        | 300   | 05          | 1     |
| C1        | 300   | 06          | 2     |
| D1        | 210   | 03          | 1     |
| A1        | 100   | 10          | 3     |
| D1        | 210   | 03          | 2     |

在上面的例子中,正确的单位总数应该是 705。SQL 或 DAX 中的解决方案可以工作(尽管我倾向于 SQL)。我已经搜索了很长时间,但找不到适合这种特定情况的解决方案。非常感谢您的时间和考虑!

【问题讨论】:

  • 那么你有什么尝试?你在哪里卡住了?请向我们展示您的尝试。

标签: sql-server powerbi dax


【解决方案1】:

您可以在partition by 托盘处使用带有over 子句的窗口函数row_number()。在每个分区中,您可以通过在 over 子句中使用 order by 来控制为哪一行分配数字 1。

select
*
from (
    select 
      Pallet_ID 
    , Units 
    , Defect_Code
    , row_number() over(partition by Pallet_ID order by defect_code) as count_of
    from yourtable
    ) 
where count_of = 1

注意我有可仲裁性使用列defect_code 进行排序,因为我不知道可能存在哪些其他列。如果您的表具有创建行时的日期/时间值,您可以改用它,或者可能是表的唯一键。

旁注: 我不建议使用“count”的列别名,因为它是 SQL 保留字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2014-03-01
    • 2018-05-16
    • 2020-12-31
    • 2015-08-10
    • 2019-06-06
    相关资源
    最近更新 更多