日期:2014-05-17  浏览次数:20893 次

在线等,按条件查出一张试图中的相同记录
现在有一张视图按分类查处重复记录

比如现在有三个分类,自营,资管,研究

这三个类型的数据都在这个视图

type Stockcode mairu  

自营 001 1
自营 001 2

资管 002 1
资管 001 2

研究 003 2
研究 001 2


就是把类型为自营,和资管的数据进行对比,如果stockcode相同就查出来,

结果
type Stockcode mairu

自营 001 1
自营 001 2
资管 001 2


------解决方案--------------------
自营stockcode相同的数据,并且资管没有stockcode和它相同的时候,这种数据应该不检索出来
SQL code

SQL> WITH t AS (
  2      SELECT '自营' ttype,'001' stockcode,1 mairu FROM dual UNION ALL
  3      SELECT '自营' ttype,'001' stockcode,2 mairu FROM dual UNION ALL
  4      SELECT '自营' ttype,'003' stockcode,1 mairu FROM dual UNION ALL
  5      SELECT '自营' ttype,'003' stockcode,2 mairu FROM dual UNION ALL
  6      SELECT '自营' ttype,'004' stockcode,2 mairu FROM dual UNION ALL
  7      SELECT '资管' ttype,'002' stockcode,1 mairu FROM dual UNION ALL
  8      SELECT '资管' ttype,'001' stockcode,2 mairu FROM dual UNION ALL
  9      SELECT '资管' ttype,'005' stockcode,2 mairu FROM dual UNION ALL
 10      SELECT '资管' ttype,'005' stockcode,2 mairu FROM dual UNION ALL
 11      SELECT '研究' ttype,'003' stockcode,2 mairu FROM dual UNION ALL
 12      SELECT '研究' ttype,'001' stockcode,2 mairu FROM dual
 13  )
 14  SELECT m.ttype,
 15         m.stockcode,
 16         m.mairu
 17    FROM (SELECT t.*,
 18                 COUNT(*) OVER(PARTITION BY t.stockcode) total_cn,
 19                 COUNT(*) OVER(PARTITION BY t.ttype, t.stockcode) cn
 20            FROM t
 21           WHERE t.ttype IN ('自营', '资管')) m
 22   WHERE m.total_cn <> cn
 23  ;
 
TTYPE  STOCKCODE      MAIRU
------ --------- ----------
自营   001                1
自营   001                2
资管   001                2