web-dev-qa-db-ja.com

SQL Serverクエリ - DISTINCTを使用したCOUNT(*)の選択

SQL Server 2005には、実運用に投入されたすべてのコードをリストしたcm_productionテーブルがあります。テーブルには、他のいくつかの列とともに、ticket_number、program_type、およびprogram_nameとPush_numberがあります。

目標:すべてのDISTINCTプログラム名をプログラムタイプとプッシュ番号で数える

私がこれまでに持っているのは、

DECLARE @Push_number INT;
SET @Push_number = [HERE_ADD_NUMBER];

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE Push_number=@Push_number 
GROUP BY program_type

これは私を途中で取得しますが、それは(私はそれがそのクエリで行うことを期待していない)明確なものではなく、すべてのプログラム名を数えています。選択せずに個別のプログラム名のみを数えるように指示する方法を頭で囲むことはできないと思います。か何か。

366
somacore

プログラムタイプとプッシュ番号によってすべてのDISTINCTプログラム名を数えます。

SELECT COUNT(DISTINCT program_name) AS Count,
  program_type AS [Type] 
FROM cm_production 
WHERE Push_number=@Push_number 
GROUP BY program_type

DISTINCT COUNT(*)はそれぞれのユニークなカウントに対して行を返します。必要なものは COUNT(DISTINCT <expression>) :グループ内の各行の式を評価し、一意のNULL以外の値の数を返します。

630
Remus Rusanu

それぞれ異なる値の出現回数を取得する必要がありました。列には地域情報が含まれていました。簡単なSQLクエリは、次のとおりです。

SELECT Region, count(*)
FROM item
WHERE Region is not null
GROUP BY Region

これは私に次のようなリストを与えるでしょう:

Region, count
Denmark, 4
Sweden, 1
USA, 10
92
Netsi1964

異なる列の一時テーブルを作成してから、そのテーブルからカウントを照会する必要があります。

SELECT COUNT(*) 
FROM (SELECT DISTINCT column1,column2
      FROM  tablename  
      WHERE condition ) as dt

ここでdtは一時テーブルです

32
venkatesh
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE Push_number=@Push_number 
GROUP BY program_type
15
van

これを試して:

SELECT
    COUNT(program_name) AS [Count],program_type AS [Type]
    FROM (SELECT DISTINCT program_name,program_type
              FROM cm_production 
              WHERE Push_number=@Push_number
         ) dt
    GROUP BY program_type
13
KM.