过滤掉数据中的重复数据,并且只保留一条
各位,我遇到了一个对我而言很大的麻烦,对于一个sql的语句如何去过滤掉数据中的重复数据,并且只保留一条数据供使用,但是我这里的过滤是不能对其进行删除,只是单纯的过滤掉它。
[解决办法]
你都会用分析函数ROW_NUMBER() ,使用分析函数ROW_NUMBER() Over(partition by 重复字段 order by 排序字段)生产行号,然后取行号为1的记录就可以过滤了
[解决办法]
把里面所有的UNION ALL改成UNION即可
SELECT GID = ROW_NUMBER() OVER ( ORDER BY CONVERT(INT, XL.DJL) DESC ) ,
XL.*
FROM ( SELECT XL.XLMC ,
XL.XLTS ,
XL.F_219930215757439 XLID ,
XL.TP ,
XL.DJL ,
XL.FBSJ ,
XL.ZXL ,
'gny/ztslb' LINK
FROM DEFINE_CXSYXLTJLB TJ
INNER JOIN DEFINE_XL_GN XL ON ( TJ.XLID = XL.F_219930215757439 )
UNION
SELECT XL.XLMC ,
XL.XLTS ,
XL.F_219930215757439 XLID ,
XL.TP ,
XL.DJL ,
XL.FBSJ ,
XL.ZXL ,
'cjy/ztslb' LINK
FROM DEFINE_CXSYXLTJLB TJ
INNER JOIN DEFINE_XL_CJ XL ON ( TJ.XLID = XL.F_219930215757439 )
UNION
SELECT XL.XLMC ,
XL.XLTS ,
XL.F_219930215757439 XLID ,
XL.TP ,
XL.DJL ,
XL.FBSJ ,
XL.ZXL ,
'zby/ztslb' LINK
FROM DEFINE_CXSYXLTJLB TJ
INNER JOIN DEFINE_XL_ZTC XL ON ( TJ.XLID = XL.F_219930215757439 )
UNION
SELECT XL.XLMC ,
XL.XLTS ,
XL.F_219930215757439 XLID ,
XL.TP ,
XL.DJL ,
XL.FBSJ ,
XL.ZXL ,
'zyx/ztslb' LINK
FROM DEFINE_CXSYXLTJLB TJ
INNER JOIN DEFINE_ZYX XL ON ( TJ.XLID = XL.F_219930215757439 )
) XL
ORDER BY CONVERT(INT, XL.DJL) DESC;