0

場合によっては When 句を含むクエリがあります。

次に、関数lead(またはlag)を使用して他の行をチェックします。

問題は、テーブルの順序で、順序なしでチェックすることです。したがって、私の結果では常に良い順序になるとは限りません。

 CASE
          WHEN Lead(s.id_location, 1, NULL) OVER (ORDER BY s.id_location) = s.id_location THEN  'at the same address '
          ELSE '\par \tab ' ||s.dir || '\par \tab '|| s.address || '\par \tab salle ' || s.lib_ || '\par \tab '|| s.etage  
        END AS adresscomplete, 

注文できる日付が関連付けられています。しかし、問題は、間違った行に「同じアドレスで」というテキストが含まれる可能性があることです。これは、リード(またはラグ)した順序を選択していないためです。したがって、これは結果として次のようになります。

私の方向、私の住所、私のサル....同じ住所または同じ住所で....私の方向、私の住所、私のサール

2番目は明らかに間違っている

私のケースに入る前に、行を日付順に並べることを選択できますか。そうすれば、常に「同じ住所で」というテキストで2番目になります。

これは

私の方向、私の住所私のサルの最初の日付....同じ住所で2番目の日付であり、そうではありません

同じ住所の日付で .... 私の方向、私の住所 私のサル 2番目の日付

ありがとうございました。

4

1 に答える 1

1

それは問題ないようです。結果レコードを表示するときは、必ず同じ順序を使用してください。

SELECT ...
  CASE 
    WHEN LAG(s.id_location) OVER (ORDER BY s.id_location) = s.id_location 
    THEN  'at the same address '
  ...
FROM ...
WHERE ...
ORDER BY s.id_location; -- <== This is necessary to show your results ordered

編集:なぜ鉛なのですか?「同じアドレスで」表示するために、LAG で前の行にこのアドレスが既にあるかどうかを確認する必要があります。

編集: 日付順 (および日付内の場所順) に並べ替えるには、次のステートメントを使用します。時間の部分がある場合に備えて削除するために、日付を切り捨てます。

SELECT ...
  CASE 
    WHEN LAG(s.id_location) OVER (ORDER BY TRUNC(s.thedate), s.id_location) = s.id_location 
    THEN  'at the same address '
  ...
FROM ...
WHERE ...
ORDER BY TRUNC(s.thedate), s.id_location; -- <== This is necessary to show your results ordered
于 2013-11-14T13:09:21.960 に答える