it-swarm.com.de

SQL Server-Abfrage - Auswahl von COUNT (*) mit DISTINCT

In SQL Server 2005 habe ich eine Tabelle cm_production, die den gesamten Code auflistet, der in die Produktion gebracht wurde. Die Tabelle enthält eine Ticket_Nummer, einen Programm_Typ sowie einen Programm_Namen und eine Push_Nummer sowie einige andere Spalten.

ZIEL: Zählen Sie alle DISTINCT-Programmnamen nach Programmtyp und Push-Nummer

Was ich bisher habe ist:

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

Das bringt mich auf halbem Weg dorthin, aber es werden alle Programmnamen gezählt, nicht die eindeutigen (was ich bei dieser Abfrage nicht erwarte). Ich schätze, ich kann mich einfach nicht darum kümmern, wie ich sagen soll, dass ich nur die verschiedenen Programmnamen zählen soll, ohne sie auszuwählen. Oder so.

384
somacore

Zählen Sie alle DISTINCT-Programmnamen nach Programmtyp und Push-Nummer

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

DISTINCT COUNT(*) gibt eine Zeile für jede eindeutige Anzahl zurück. Was Sie wollen, ist COUNT(DISTINCT <expression>) : Wertet den Ausdruck für jede Zeile in einer Gruppe aus und gibt die Anzahl der eindeutigen Werte ungleich Null zurück.

661
Remus Rusanu

Ich musste die Anzahl der Vorkommen jedes einzelnen Werts ermitteln. Die Spalte enthielt Regionsinformationen. Die einfache SQL-Abfrage, mit der ich endete, war:

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

Was mir eine Liste geben würde wie:

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

Sie müssen eine abgeleitete Tabelle für die verschiedenen Spalten erstellen und dann die Anzahl dieser Tabelle abfragen:

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

Hier ist dt eine abgeleitete Tabelle.

34
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

versuche dies:

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.