0

Oracleの分析関数(ラグなど)を使用して前の行を確認し、2つの列に基づいて、これらの値が現在の行とまったく同じかどうかを判断することは可能ですか? そうである場合は文字「Y」を出力し、そうでない場合は「N」を出力します。

何かのようなもの:

IF prev.col1 = curr.col1 and prev.col2 = curr.col2 THEN 'Y' ELSE 'N'

この Y または N を使用して、作成中の Crystal Report でこれらのレコードを除外したいと考えています。

4

1 に答える 1

3

はい。ただし、分析はかなり遅く処理されるため、分析をサブクエリとして使用してクエリを作成する必要があります。

SELECT CASE WHEN col1 = prev_col1 AND col2 = prev_col2 THEN 'Y' ELSE 'N' END as yesno
  FROM (
SELECT col1, col2, 
       LAG( col1, 1 ) OVER ( ORDER BY col1, col2 ) AS prev_col1
       LAG( col2, 1 ) OVER ( ORDER BY col1, col2 ) AS prev_col2
  FROM mytable
)

ORDER BY「前の」行をどのように定義しているかに応じて、句を調整する必要があります。PARTITION BYテーブル全体を単一の行グループとして扱いたくない場合は、句を追加することもできます。

于 2012-11-26T01:24:21.943 に答える