如何为重复行返回Null?SQL查询重复文件路径问题排查
为什么使用SELECT DISTINCT后仍有重复的imageFilePath?
问题出在DISTINCT是对整行所有列的组合去重,而不是只针对你生成的imageFilePath列。如果你的SELECT语句里还包含其他字段(比如olnn.olnnNote、olnav.olnavValue或者关联表中的其他字段),只要这些字段存在不同的值,哪怕imageFilePath完全一样,整行依然会被保留,所以你看起来还是有重复的路径。
解决办法分两种场景:
场景1:只需要唯一的imageFilePath列表
如果你的需求仅仅是获取所有不重复的图片路径,那么简化你的SELECT语句,只保留imageFilePath列,再搭配DISTINCT:
SELECT DISTINCT CASE WHEN olnn.olnnNote LIKE '%SEE DRAWING%' THEN 'Y:\300 ORDER PROCESSING\Majid Ahmadi\Custom Cabs\CUSTOM_' + CAST(olnav.olnavValue AS nvarchar(25)) + '.jpg' ELSE NULL END AS imageFilePath -- 这里替换成你的FROM和JOIN语句 FROM 你的表名1 olnn JOIN 你的表名2 olnav ON ... -- 你的关联条件
场景2:需要保留其他字段,同时对imageFilePath去重
如果还需要展示其他字段,那么可以用GROUP BY来按imageFilePath分组,对其他字段使用聚合函数(比如MAX()、MIN())来保留唯一值:
SELECT CASE WHEN olnn.olnnNote LIKE '%SEE DRAWING%' THEN 'Y:\300 ORDER PROCESSING\Majid Ahmadi\Custom Cabs\CUSTOM_' + CAST(olnav.olnavValue AS nvarchar(25)) + '.jpg' ELSE NULL END AS imageFilePath, MAX(olnn.olnnNote) AS olnnNote, -- 用聚合函数处理其他字段 MAX(olnav.olnavValue) AS olnavValue FROM 你的表名1 olnn JOIN 你的表名2 olnav ON ... GROUP BY CASE WHEN olnn.olnnNote LIKE '%SEE DRAWING%' THEN 'Y:\300 ORDER PROCESSING\Majid Ahmadi\Custom Cabs\CUSTOM_' + CAST(olnav.olnavValue AS nvarchar(25)) + '.jpg' ELSE NULL END
额外排查步骤
你可以先运行下面的查询,定位到底哪些行导致了重复:
SELECT olnn.olnnNote, olnav.olnavValue, CASE WHEN olnn.olnnNote LIKE '%SEE DRAWING%' THEN 'Y:\300 ORDER PROCESSING\Majid Ahmadi\Custom Cabs\CUSTOM_' + CAST(olnav.olnavValue AS nvarchar(25)) + '.jpg' ELSE NULL END AS imageFilePath, COUNT(*) AS duplicate_count FROM 你的表名1 olnn JOIN 你的表名2 olnav ON ... GROUP BY olnn.olnnNote, olnav.olnavValue, imageFilePath HAVING COUNT(*) > 1
这个查询会列出所有重复的路径组合及其出现次数,帮你确认是olnn.olnnNote重复导致的,还是olnav.olnavValue对应多个Note的情况。
内容的提问来源于stack exchange,提问作者MJX Boz
相关产品推荐
相关产品推荐

