2

次のようなSQL-Serverのテーブルを指定します。

Id INTEGER
A  VARCHAR(50)
B  VARCHAR(50)
-- Some other columns

AまたはBにインデックスがないので、AとBの一意の組み合わせが複数回発生する行を見つけたいと思います。

クエリを使用しています

SELECT A+B, Count(A+B) FROM MyTable
GROUP BY A+B
HAVING COUNT(A+B) > 1

最初の質問

これを行うためのより時間効率の良い方法はありますか?(データベースにインデックスを追加できません)

2番目の質問

,連結にを含めることによって出力のフォーマットを取得しようとすると、次のようになります。

SELECT A+','+B, Count(A+','+B) FROM MyTable
GROUP BY A+','+B
HAVING COUNT(A+','+B) > 1

クエリはエラーで失敗します

Column 'MyDB.dbo.MyTable.A' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause

列Bについても同様のエラーが発生します。

出力をフォーマットして2つの列を分離するにはどうすればよいですか?

4

1 に答える 1

13

私には次のように書くほうが自然に思えます。

SELECT A, B, Count(*) FROM MyTable
GROUP BY A, B
HAVING COUNT(*) > 1

そして、それはそれを行うための最も効率的な方法です(そして質問のクエリもそうです)。

上記のクエリと同様に、2番目のクエリを書き直すことができます。

SELECT A + ',' + B, Count(*) FROM MyTable
GROUP BY A, B
HAVING COUNT(*) > 1
于 2012-12-10T19:13:07.853 に答える