risposta-alla-domanda-sullo-sviluppo-web-bd.com

Query SQL Server: selezione di COUNT (*) con DISTINCT

In SQL Server 2005 ho una tabella cm_production che elenca tutto il codice che è stato messo in produzione. La tabella ha un ticket number, program_type e program_name e Push_number insieme ad alcune altre colonne.

OBIETTIVO: conta tutti i nomi dei programmi DISTINCT per tipo di programma e numero di push

Quello che ho finora è:

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

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type

Questo mi fa separare lì, ma sta contando tutti i nomi dei programmi, non quelli distinti (che non mi aspetto che faccia in quella domanda). Immagino che non riesca a spiegarmi come contare solo i nomi distinti del programma senza selezionarli. O qualcosa.

366
somacore

Conta tutti i nomi dei programmi DISTINCT per tipo di programma e numero di push

SELECT COUNT(DISTINCT program_name) AS Count,
  program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type

DISTINCT COUNT(*) restituirà una riga per ogni conteggio univoco. Quello che vuoi è COUNT(DISTINCT <expression>) : valuta l'espressione per ogni riga in un gruppo e restituisce il numero di valori univoci, non nulli.

630
Remus Rusanu

Avevo bisogno di ottenere il numero di occorrenze di ciascun valore distinto. La colonna conteneva informazioni sulla regione. La semplice query SQL che ho trovato è stata:

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

Quale mi darebbe una lista come, ad esempio:

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

Devi creare una tabella temporanea per le colonne distinte e quindi interrogare il conteggio da quella tabella

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

qui dt è una tabella temporanea

32
venkatesh
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type
15
van

prova questo:

SELECT
    COUNT(program_name) AS [Count],program_type AS [Type]
    FROM (SELECT DISTINCT program_name,program_type
              FROM cm_production 
              WHERE [email protected]_number
         ) dt
    GROUP BY program_type
13
KM.