5

テーブルがあり、4つの列があるとします Id, Name, Cell_no, Cat_idCat_idcountが。より大きいすべての列を返す必要があります1

グループはとで行う必要がCell_noありNameます。私がこれまでにしたこと..

select Cell_no, COUNT(Cat_id)
from TableName
group by Cell_Number
having COUNT(Cat_id) > 1

しかし、私が必要としているのは、このようなものです。

select * 
from TableName
group by Cell_Number
having COUNT(Cat_id) > 1
4

3 に答える 3

2

Pratikの答えは良いですが、演算子(単一の値に対してのみ機能します)を使用するのではなく、次のような結果セットに戻るIN必要があります。JOIN

SELECT t.* 
FROM tableName t
INNER JOIN      
    (SELECT Cell_no, Name 
    FROM TableName
    GROUP BY Cell_no , Name
    HAVING COUNT(Cat_id) > 1) filter
    ON t.Cell_no = filter.Cell_no AND t.Name = filter.Name
于 2012-05-28T06:39:48.620 に答える
1

以下のようにクエリを変更する必要があります-

select * from tableName where (Cell_no, Name) in (
          select Cell_no, Name from TableName
           Group by Cell_no , Name
           having COUNT(Cat_id) > 1
           )

問題の質問に応じて、Cell_noとNameでグループ化します。その場合は、group by列のクエリを変更し、パーツも選択する必要があります。前述のとおりです。

于 2012-05-28T06:28:50.553 に答える
1

このバージョンでは、データを1回パスするだけで済みます。

SELECT *
FROM   (SELECT a.*
              ,COUNT(cat_id) OVER (PARTITION BY cell_no)
               AS count_cat_id_not_null
        FROM   TableName a)
WHERE  count_cat_id_not_null > 1;
于 2012-05-28T06:32:42.540 に答える