4

私のテーブルは次のようになります。

ID ProductName ProductCode
1  abc         123
2  abc         123
3  abc         456
4  def         789
5  ghi         246
6  jkl         369
7  jkl         369
8  jkl         369
9  jkl         468
10 jkl         468

そして、次のような要約テーブルを作成したいと思います。

ProductName ProductCode Total
abc         123         2
abc         456         1
jkl         369         3
jkl         468         2

つまり、製品「def」と「ghi」には興味がありません。これらは元のテーブルに 1 回しか表示されないからです。他のすべてについては、ProductName と ProductCode でグループ化し、カウントを表示したいと考えています。

group by 句と where in (select...) で遊んでみましたが、円を描いてしまいました。

テーブルには約 50,000 行あり、SQL Server 2008 R2 上にあります。

4

4 に答える 4

3

これです:

SELECT
      ProductName,
      ProductCode,
      COUNT(*) as Total
 FROM Table1
 WHERE ProductName IN (SELECT ProductName FROM Table1 GROUP BY ProductName HAVING COUNT(*) > 1)
 GROUP BY ProductName, ProductCode

http://www.sqlfiddle.com/#!3/c79ad/9

于 2012-12-10T15:37:09.753 に答える
0

HAVINGアグリゲートでフィルタリングするには、次の句を使用する必要があります。

SELECT
  ProductName,
  ProductCode,
  COUNT(*) as Total
FROM T
GROUP BY ProductName, ProductCode
HAVING COUNT(*) > 1
于 2012-12-10T15:30:13.810 に答える
0
;WITH cte AS
 (
  SELECT ID, ProductName, ProductCode,
         COUNT(*) OVER (PARTITION BY ProductName, ProductCode) AS Total,
         COUNT(*) OVER (PARTITION BY ProductName) AS PCount,
         ROW_NUMBER() OVER (PARTITION BY ProductName, ProductCode ORDER BY ID) AS rn
  FROM Products
  )
  SELECT ID, ProductName, ProductCode, Total
  FROM cte
  WHERE PCount > 1 AND rn = 1
于 2012-12-10T15:52:48.960 に答える
-1

WHERE集計している列では使用できません。HAVING代わりに使用する必要があります。

SELECT   ProductName,
         ProductCode,
         COUNT(*) AS Total
FROM     Products p
GROUP BY p.ProductName, 
         p.ProductCode
HAVING   COUNT(p.ProductName) > 1
于 2012-12-10T15:36:00.410 に答える