0

と呼ばれる私の列Cityには、同じ都市を持つ 10 行以上があり、各行には同じ都市名が表示されます。私が欲しいのはORDER BY CITY、その都市を持つ最初の行の都市名を取得し、次の行に表示CITY="-"またはNULL値を表示して、詳細が同じ都市のものであることを示す必要があります。

試み: この問題を解決するために、私は何週間にもわたって多くのことを試みました。

  1. これを使用しましたが、出力の順序はZONES(citynames). ただし、都市名が重複して表示されている行を選択することはできません。

    WITH T1 AS
    (SELECT *
    FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ZONE ORDER BY Date ASC) AS ROWID 
          FROM Try2)T
    WHERE T.ROWID > 1)
    UPDATE T1 SET ZONE='NULL'
    
  2. 使い方のアドバイスを頂きましたPIVOT。しかし、研究があまり得られなかった後、そのような問題ではなく、行を列と交換するために与えられたピボットの例。

  3. 重複する行を削除するオンラインの例は多数ありますが、繰り返し値を他の値に置き換える例はほとんどありません (こちら--)。一時テーブルも使用しようとしましたが、構文エラーが原因で、まだ作業中です。

21 の異なる都市があるため、それらすべての重複を見つけて、他の行の詳細を変更せずにそれぞれの都市名を置き換える必要があります。初心者なので、これを実装する方法がわかりません。誰かが私を助けたり、参考文献を教えてくれませんか?

4

1 に答える 1

0

まず、元のデータを変更したくありません。少なくとも私の意見では。テーブルは本質的に順序付けされていないため、「最初」という概念はありません。

代わりに、データをフェッチするときに実行してください。最初のフィールドを定義する「日付」というフィールドがあるとします。

select (case when try2.date = tc.mindate then try2.city else '-' end) as city,
       <rest of the columns>
from try2 join
     (select city, min(date) as mindate
      from try2
      group by city
     ) tc
     on try2.city = tc.city 
order by city, date

ランキング関数 (row_number()) で同様のことができます。

于 2012-08-09T13:49:01.407 に答える