ホームページ >バックエンド開発 >PHPチュートリアル >DISTINCT_PHP チュートリアルに関する質問と回答
友人からも同様の質問がよくあります
表のデータは次のとおりです
ID AA BB
1 123 456
1 4535 54
1 60 6564
1 60 656
2 50 664
2 60 6
3 89 89
4 40 4242
望ましい結果は
ID AA BB
1 123 456
2 50 664
3 89 89
4 40 4242
もちろん、環境はSQL Serverです
答えと分析は次のとおりです:
1, Many友人、distinct を使用することで問題が解決することを願っていますが、それは不可能です。distinct は重複レコードを無視します
が、特定のフィールドが繰り返されるレコードではなく、まったく同じ重複レコードを無視します。そのため、そのようなものは
しかありません。構文
select unique ID,AA,BB from tName
select unique(ID),AA,BB from tName や
select ID,distinct AA,BB などの他の記述方法は無効です
2、group by と集計関数を使用します
select ID,MAX (AA) AS AA,MAX(BB) AS BB を ID ごとに tName グループから抽出すると、次の結果が得られます
ID AA BB
1 4535 6564
2 60 664
3 89 89
4 40 4242
ID は一意ですが、そうではありません 次のフィールドは同じレコードである必要があります
3、一時テーブルを使用します
IDENTITY(INT,1,1) を TID,ID,AA,BB として tName から #Tmp に選択します
t1.ID,t1 を選択します.AA,t1. BB from #Tmp t1 where t1.TID in
(select min(T2.TID) from #Tmp t2 group by t2.ID)
この方法で要件を満たす結果を得ることができます
ただし、次を使用します2 つの T-SQL ステートメント
および大量のデータがある場合、パフォーマンスの問題が非常に顕著になります
これまでのところ、T-SQL ステートメントを使用して同じ機能を実現する方法は見つかりませんでした。
もし誰かがいるなら何かあれば追加したいと思います