SQL Server query-Selecting COUNT (*) with DISTINCT

W SQL Server 2005 mam tabelę cm_production, która zawiera listę całego kodu, który został wprowadzony do produkcji. Tabela zawiera ticket_number, program_type, nazwa_programu i push_number wraz z kilkoma innymi kolumnami.

Cel: policz wszystkie nazwy programów według typu programu i numeru push

To co mam do tej pory to:

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

To sprawia, że część mnie tam, ale liczy wszystkie nazwy programów, a nie te odrębne (czego nie oczekuję, że to zrobi w tym zapytanie). Chyba po prostu nie mogę zawinąć głowy, jak powiedzieć mu, aby liczył tylko różne nazwy programów bez ich wybierania. Czy coś.

Author: marc_s, 2009-10-05

7 answers

Policz wszystkie nazwy poszczególnych programów według typu programu i numeru push

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(*) zwróci wiersz dla każdego unikalnego count. What you want is COUNT (DISTINCT expression): oblicza wyrażenie dla każdego wiersza w grupie i zwraca liczbę unikalnych, nonnull wartości.

 554
Author: Remus Rusanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-05 18:26:03

Musiałem uzyskać liczbę wystąpień każdej odrębnej wartości. Kolumna zawierała informacje o regionie. Proste zapytanie SQL, z którym skończyłem, brzmiało:

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

Co dałoby mi listę jak, powiedzmy:

Region, count
Denmark, 4
Sweden, 1
USA, 10
 74
Author: Netsi1964,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 16:17:41

Musisz utworzyć tabelę tymczasową dla poszczególnych kolumn, a następnie odpytywać liczbę z tej tabeli

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

Tutaj DT jest tabelą temp

 23
Author: venkatesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-30 07:33:08

Spróbuj tego:

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
Author: KM.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-05 18:25:26
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type
 12
Author: van,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-05 18:27:17

Jest to dobry przykład, w którym chcesz uzyskać liczbę kodu PIN przechowywanego w ostatnim polu adresu

SELECT DISTINCT
    RIGHT (address, 6),
    count(*) AS count
FROM
    datafile
WHERE
    address IS NOT NULL
GROUP BY
    RIGHT (address, 6)
 -1
Author: Uday Phadke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 08:27:44
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
 -5
Author: Taryn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-02 17:24:29