SQL Serverクエリ-DISTINCTでのCOUNT(*)の選択


431

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

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

回答:


729

すべての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でない一意の値の数を返すことです。


110

各個別の値の発生数を取得する必要がありました。列には地域情報が含まれていました。簡単なSQLクエリは次のとおりです。

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

次のようなリストが表示されます。

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

@ Netsi1964同じクエリが使用されていますが、Region、State、Countが必要です。可能ですか?私を助けてください

48

個別の列の派生テーブルを作成し、そのテーブルからカウントをクエリする必要があります。

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

これdtは派生テーブルです。


1
ありがとうございました!多くのデータベースでSQLを使用してきたので、「as X」を使用して一時テーブルとして修飾する必要があったのはこれが初めてです。
うーん

6
ここでの「dt」の通常の用語は一時テーブルではなく派生テーブルであることに注意してください
8forty

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

15

これを試して:

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

-1

これは、最後のアドレスフィールドに格納されているピンコードの数を取得する良い例です

SELECT DISTINCT
    RIGHT (address, 6),
    count(*) AS count
FROM
    datafile
WHERE
    address IS NOT NULL
GROUP BY
    RIGHT (address, 6)

-6
select  count (distinct NumTar),'PROPIAS'
from ATM_TRANe with (nolock)
where Fecha>='2014-01-01'
  AND Fecha<='2015-05-31'and NetDestino=0
  and SystemCodResp=0
group by NetDestino 
union 
select sum (contar),'FORANEAS'
from  
(
  select  count(distinct NumTar) as contar
  from ATM_TRANe with (nolock)
  where Fecha>='2014-01-01'
    AND Fecha<='2014-01-31'
    and NetDestino!=0
    and SystemCodResp=0
  group by NetDestino
)dt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.