2

この特定の表を以下に示します。グループ 2 から重複するコースを削除したいのですが、それはグループ 1 にあるためです。最初に繰り返しコースを確認してから、必須ではない重複コースを削除する必要があります。


    Program   Group Course     Mandatory
     Program1   1   a          YES
     Program1   1   b          YES
     Program1   1   c          YES
     Program1   2   d          NO
     Program1   2   a          NO
     Program1   2   e          NO
     Program1   3   f          YES  

私は同じ列操作を理解することができないか、今日は私の心が働いていません(:-) )カウント操作を使用して重複行のフラグを作成しようとしましたが、group by句で「グループ」を使用してそれを行うことはできません.

出力:

    Program   Group Course     Mandatory
     Program1   1   a          YES
     Program1   1   b          YES
     Program1   1   c          YES
     Program1   2   d          NO
     Program1   2   e          NO
     Program1   3   f          YES  

編集

重複レコードを確認し、特定の 1 つのグループからのみ削除するにはどうすればよいでしょうか。

4

2 に答える 2

3

ROW_NUMBER() 関数を使用してこれを実現できます。

SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY COURSE ORDER BY [Group] ) as RowRank
      FROM table
     )sub
WHERE RowRank = 1

デモ: SQL フィドル

編集: ROW_NUMBER は、各行に番号を割り当てます。番号付けは、部分を介して割り当てたグループごとに 1 から始まりますPARTITION BY。この場合、それぞれCOURSEに番号 1 があり、上に向かっていきます。数字の順序はORDER BY部分によって決まります。この場合、最も低い[Group]ものが 1 になります。

于 2013-06-26T20:04:52.457 に答える