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

以下は、除外したいグループ ID のリストです。

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 に答える