首页 > 解决方案 > SQL 按类型选择行特定数据

问题描述

经过无数次连接构建查询后,我陷入了一个产品表,其中包含 3 列标识 ID-Color-Size 和数据条码列,例如

ID 颜色 尺寸 条码
34 40 4 5205条码1
34 40 4 额外数据1
34 40 5 5205条码2
34 40 5 额外数据2
34 41 4 5205条码3
34 41 4 额外数据3
35 40 5 5205条码4
35 40 5 额外数据4
34 40 3 数据4
35 39 5 数据5
35 40 3 数据6

我需要保留 ID-Color-Size 与条形码的唯一组合(以“5205%”开头)并删除具有相同 id-color-size 的行(extradata1-5 被认为是重复的)。

最终表将具有 ID-Color-Size-barcode1-4 和data4-5-6的唯一组合

标签: sql-server

解决方案


如果我理解正确,您需要一个窗口功能来按条形码订购 id/color/size 的副本,并且只选择条形码以 5205 开头的那些:

with p as (
select *,
    Row_Number() over(partition by id, color, size order by case when barcode like '5205%' then 1 end desc) rn
from t
)
select id, color, size, barcode
from p
where rn=1

推荐阅读