怎么样能使得如下文去重保留一条

如下图,怎么写SQL使得 ,字段:在点位、轴位、配件名三个字段相同的情况下,当Item和Item2这两个字段组合值一样时,只取一条(意思就是下图的379和380条 数据,只取其中一条就行)

---------------------------

image.png

SQL yzmaDt6d6191220 发布于 2023-3-22 16:59 (编辑于 2023-3-22 17:09)
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
luojian0323Lv7资深互助
发布于2023-3-22 17:00

用row_number等开窗函数分组排序号

然后再套一层查询,取序号为1的记录

  • yzmaDt6d6191220 yzmaDt6d6191220(提问者) 刚刚试了用开窗函数,用了这五个字段分组,但是没办法做到,它可以排序为1,2 ,图补在回答里面了,麻烦您帮忙看一下,谢谢了
    2023-03-22 17:07 
  • luojian0323 luojian0323 回复 yzmaDt6d6191220(提问者) 379条和380条不完全一样,它怎么能取其中一条呢? 你的逻辑到底是什么?
    2023-03-22 17:12 
  • yzmaDt6d6191220 yzmaDt6d6191220(提问者) 回复 luojian0323 前三个字段一样啊,但是后两个字段的组合值是一样的啊,所以我只想取一条就行
    2023-03-22 17:15 
  • yzmaDt6d6191220 yzmaDt6d6191220(提问者) 回复 luojian0323 我的逻辑就是,当点位,轴位,配件名,一样时,Item和Item2的组合值,也就是(\'值A\',\'值B\')和(\'值B\',\'值A\'),我只用取一条,按照开窗函数分组,如果能达到刚刚的379和380这两条数据的排序是1和2和话,我就可以按您回答上说的取序号为1 的了,但是事实上是我那样取还是不行
    2023-03-22 17:20 
  • luojian0323 luojian0323 回复 yzmaDt6d6191220(提问者) 先做一次数据处理,把item和item2根据两个字段值大小判断后,重新放置 比如取item时,判断 case when item>=item2 then item else item2 end 比如取item2时,判断 case when item2<=item then item2 else item end 然后再按上述方法排序 ,再取序号1
    2023-03-22 17:22 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-3-22 17:01(编辑于 2023-3-22 17:35)

image.png???

这完全不同啊

--------------

这两个 改成 concat(item,item2)

image.png

-------

with test as(

select '粗磨'[点位],'X3'[轴位],'丝杆' [配件名],'2C0806000063' [ITEM],'2C0806000064' [ITEM2]

UNION ALL

select '粗磨'[点位],'X3'[轴位],'丝杆' [配件名],'2C0806000064' [ITEM],'2C0806000063' [ITEM2]

)

SELECT *,ROW_NUMBER() OVER(PARTITION BY 点位,轴位,配件名,(CASE WHEN CONVERT(BIGINT,SUBSTRING(ITEM,3,LEN(ITEM)-3))> CONVERT(BIGINT,SUBSTRING(ITEM,3,LEN(ITEM2)-3)) THEN CONCAT(ITEM2,ITEM) ELSE  CONCAT(ITEM,ITEM2) END) ORDER BY ITEM ASC) [I] FROM TEST

image.png

  • yzmaDt6d6191220 yzmaDt6d6191220(提问者) 图贴错了,补充了图2
    2023-03-22 17:06 
  • Z4u3z1 Z4u3z1 回复 yzmaDt6d6191220(提问者) 上面补充了
    2023-03-22 17:10 
  • yzmaDt6d6191220 yzmaDt6d6191220(提问者) 刚刚试了concat,不行,用concat连接起来,实质上连接的一个是\'2C08060000632C0806000064\'和\'2C08060000642C0806000063\',还是不一样的,所以去不了重
    2023-03-22 17:14 
  • Z4u3z1 Z4u3z1 回复 yzmaDt6d6191220(提问者) 用concat也不对,让我再想想
    2023-03-22 17:14 
  • Z4u3z1 Z4u3z1 回复 yzmaDt6d6191220(提问者) ITEM的格式都是2C+数字么?
    2023-03-22 17:17 
  • 2关注人数
  • 317浏览人数
  • 最后回答于:2023-3-22 17:35
    请选择关闭问题的原因
    确定 取消
    返回顶部