首页 > 解决方案 > 基于优先级表消除重复记录

问题描述

我有 2 个表,1 个(产品)有以下数据

orderName       Skey
3.0             100
Pen             100
Scale           101
Pen             101
Bottle          102

优先级表第二个有以下数据

orderName       Priority
Scale           1
Pen             2
Bottle          3
3.0             4

我想根据优先级表中存在的订单优先级从产品表中删除重复值(skey)。

输出应该是

orderName   Skey
Pen         100
Scale       101
Bottle      102

我不确定如何使用单个查询来做到这一点。请帮忙

标签: sqlsql-serverdatabasetsqljoin

解决方案


这是一个完整的工作示例:

DECLARE @Products TABLE
(
    [orderName] VARCHAR(24)
   ,[Skey] INT
);

DECLARE @priority TABLE
(
    [orderName] VARCHAR(25)
   ,[Priority] TINYINT
);

INSERT INTO @Products ([orderName], [Skey])
VALUES ('3.0', 100)
      ,('Pen', 100)
      ,('Scale', 101)
      ,('Pen', 101)
      ,('Bottle', 102);

INSERT INTO @priority ([orderName], [Priority])
VALUES ('Scale', 1)
      ,('Pen', 2)
      ,('Bottle', 3)
      ,('3.0', 4);


SELECT TOP 1 WITH TIES P.[orderName], P.[Skey]
FROM @Products P
INNER JOIN @priority PR
    ON P.[orderName] = PR.[orderName]
ORDER BY ROW_NUMBER() OVER (PARTITION BY P.[Skey] ORDER BY PR.[Priority]);

在此处输入图像描述


推荐阅读