sql - 基于优先级表消除重复记录
问题描述
我有 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
我不确定如何使用单个查询来做到这一点。请帮忙
解决方案
这是一个完整的工作示例:
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]);
推荐阅读
- sql - 检测递归 CTE 中的重复项
- java - 如何通过火花流(或 kafka)从 postgresql(或 mysql)读取实时更新数据?
- c# - 调试时 Visual Studio 2017 无法检查 Razor 页面视图上的变量值
- apache-spark - 在这种情况下,火花缓存()是否会导致驱动程序收集()?
- wpf - VS2017 说“类型'字符串'不是一个集合”
- java - MyBatis:使用注解选择复杂对象
- php - 使用 PDO 准备语句和遍历接口时如何指定 fetch_style?
- c# - 在 Visual Studio 中调试远程 dll 库
- javascript - Discord bot 显示离线,bot.js 中的 ReferenceError
- c++ - constexpr exp、log、pow