1

我有一个如下表:

GroupID    ParentID    Type

   1         ABC       IND
   1         ABC       IND
   1         CDE       ORD
   1         EFG       STD
   2         ZZZ       IND
   2         ZZZ       IND
   2         ZZZ       IND
   3         YYY       COR
   3         YYY       COR

我需要排除那些在同一组中、具有相同父 ID 且类型为 IND 或 COR 的记录。但我需要保留那些具有不同父 ID 且类型不是 IND 或 COR 的组。

所以我想要得到的结果如下:

GroupID    ParentID    Type

   1         ABC       IND
   1         ABC       IND
   1         CDE       ORD
   1         EFG       STD

不知何故,我正在考虑使用 Rank () over(partition by GroupID order by ParentID),但它不会给我想要的结果。

有什么想法吗?PS:这张表有500万+条记录。寻找有效的方法来处理它。

谢谢

4

2 回答 2

1

以下为您提供了要排除的 groupID 列表

SELECT GroupID
FROM
(
  SELECT GroupID, 
         COUNT(DISTINCT ParentID) AS PCount, COUNT(DISTINCT TypeCode) as TCount,
         MAX(TypeCode) AS tCode
  FROM tablename
  GROUP BY GroupID
) t
WHERE PCount = 1 AND TCount = 1
   AND (tCode = 'IND' OR tCode = 'COR')

现在选择其他所有内容

SELECT * 
FROM tableName
WHERE GroupID not in (
  SELECT GroupID
  FROM
  (
    SELECT GroupID, 
           COUNT(DISTINCT ParentID) AS PCount, COUNT(DISTINCT TypeCode) as TCount,
           MAX(TypeCode) AS tCode
    FROM tablename
    GROUP BY GroupID
  ) t
  WHERE PCount = 1 AND TCount = 1
    AND (tCode = 'IND' OR tCode = 'COR')
)

用小提琴进行测试 --> http://sqlfiddle.com/#!3/f1d4f/15/0

于 2013-08-07T17:29:29.727 回答
0

怎么

 1         ABC       IND

在结果集中?这里的类型是 IND,你提到结果集不应该有 IND 或 COR 类型?

于 2013-08-07T18:25:31.480 回答