【问题标题】:How to remove duplicate serial numbers in SQL Server?如何在 SQL Server 中删除重复的序列号?
【发布时间】:2015-06-24 00:01:23
【问题描述】:

我在 SQL Server 2012 中有一个 BOM 表。我需要删除一些中间层,因为它们具有相同的序列号。以下是当前状态的结构和期望的结果。有人可以帮助提供 SQL 查询或过滤逻辑吗?请参阅随附的图片以获取格式化表格。

当前状态:

Parent #    Child # Parent Name     Child Name 
----------------------------------------------
123        123  Sale SKU    Sale SKU
123        123  Sale SKU    PC Pack
123        123  PC Pack        Device
123        456  Device          LCD
123        789  Device           Kit

想要的状态:

Parent #    Child #     Parent Name     Child Name 
--------------------------------------------------
123         123         Sale SKU        Sale SKU
123         456         Sale SKU        LCD
123         789         Sale SKU        Kit

格式化表格:

http://i.stack.imgur.com/kBN5D.png

【问题讨论】:

  • 所以你只想要重复的“第一个”?是什么决定了“Sale SKU”排在第一位?为什么不“PC 包”
  • 你当前的 SQL 是什么样的?
  • 欢迎来到 SO。请阅读How to Ask。告诉志愿者您的问题是“紧急的”可能不会得到您期望的答复。
  • 嗨 D Stanley,第一行有 parent # 和 child # same ,是顶层行。那就是“销售SKU”,它有相同的父、子编号。 “PC Pack”不在该类别中。

标签: sql sql-server-2012


【解决方案1】:

不确定您使用的是哪个 RDBMS,但如果它是 SQL SERVER,那么您可以使用 ROW_NUMBER() 函数来获取所需的数据,例如

select [Parent #],
    [Child #],
   [Parent Name], 
   [Child Name]
from
(
select *,
ROW_NUMBER() OVER(PARTITION BY [Child #] ORDER BY [Child #]) AS rn
from mytable
) tab
where rn  = 1;

【讨论】:

    【解决方案2】:

    您还没有说您使用的是什么 DBMS,所以这里有一个删除行的 oracle 解决方案:

    SQL Fiddle

    Oracle 11g R2 架构设置

    CREATE TABLE TEST ( Parent, Child,  Parent_Name, Child_Name ) AS
              SELECT 123, 123, 'Sale SKU', 'Sale SKU' FROM DUAL
    UNION ALL SELECT 123, 123, 'Sale SKU', 'PC Pack' FROM DUAL
    UNION ALL SELECT 123, 123, 'PC Pack',  'Device' FROM DUAL
    UNION ALL SELECT 123, 456, 'Device',   'LCD' FROM DUAL
    UNION ALL SELECT 123, 789, 'Device',   'Kit' FROM DUAL;
    
    DELETE FROM TEST
    WHERE ROWID IN (
      SELECT ROWID
      FROM   (
        SELECT ROW_NUMBER() OVER ( PARTITION BY Parent, Child ORDER BY NULL ) AS RN
        FROM   TEST
      )
      WHERE  RN > 1
    );
    

    查询 1

    SELECT * FROM TEST
    

    Results

    | PARENT | CHILD | PARENT_NAME | CHILD_NAME |
    |--------|-------|-------------|------------|
    |    123 |   123 |    Sale SKU |   Sale SKU |
    |    123 |   456 |      Device |        LCD |
    |    123 |   789 |      Device |        Kit |
    

    【讨论】:

    • 我使用的是 SQL Server 2012。感谢您的快速响应。
    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多