0

次のような多くの列を持つ SQL Server テーブルがあるとします。

Col1:    Col2:    Col3:   ...   Coln:
Val1_1   Val1_2   Val1_3        Val1_n
Val2_1   Val2_2   Val2_3        Val2_n
Val3_1   Val3_2   Val3_3        Val3_n
Val3_1   Val4_2   Val4_3        Val4_n
Val3_1   Val5_2   Val5_3        Val5_n

この場合、最後の 3 つのレコードでVal3_1が繰り返されCol1ますが、残りの値は繰り返されません。

Col1の値が複製されて返される列の完全なセットを返すクエリを作成するにはどうすればよいですか。

Col1:    Col2:    Col3:   ...   Coln:
Val3_1   Val3_2   Val3_3        Val3_n
Val3_1   Val4_2   Val4_3        Val4_n
Val3_1   Val5_2   Val5_3        Val5_n

関数を使用してみGroup Byましたが、各列の名前を書き出す必要がありました (これは非常にイライラします)。次の行に沿って何かを望んでいました:

SELECT MyTable.* FROM MyTable WHERE count(MyTable.Col1) OVER() > 1

明らかに、これは機能しませんでしたが、どうすればそれらの線に沿って何かを行うことができますか??

ありがとう!!!

4

1 に答える 1

4

サブクエリを使用できます。

select *
from mytable t1
inner join
(
  select count(col1) Total, col1
  from mytable
  group by col1
  having count(col1) > 1
) t2
  on t1.col1 = t2.col1

SQL FiddlewithDemoを参照してください

または、次を使用できますcount(*) over()

select *
from
(
  select *,
    count(*) over(partition by col1) tot
  from mytable
) src
where tot > 1

SQL FiddlewithDemoを参照してください

于 2013-02-25T21:55:47.213 に答える