sql-server - 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的唯一组合
解决方案
如果我理解正确,您需要一个窗口功能来按条形码订购 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