2009-10-05 12 views
279

W SQL Server 2005 mam tabelę cm_production, która zawiera cały kod, który został wprowadzony do produkcji. Tabela ma numer biletu, typ_programu i nazwę_programu oraz numer_pod numerem wraz z kilkoma innymi kolumnami.Zapytanie SQL Server - wybieranie COUNT (*) z DISTINCT

CEL: Policz wszystkie odrębnych nazw programów według rodzaju programu i wciśnij liczbę

co mam tak daleko jest:

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

To dostaje mi tam w trakcie, ale licząc wszystkie nazwy programu, nie te odrębne (których nie spodziewam się w tym zapytaniu). Myślę, że po prostu nie mogę zawinąć głowy, jak powiedzieć, żeby liczyć tylko różne nazwy programów bez ich wybierania. Lub coś.

Odpowiedz

478

policzyć wszystkie odrębnych nazw programów według rodzaju programu i wcisnąć numer

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

DISTINCT COUNT (*) zwróci wiersz dla każdej unikatowej liczyć. To, czego chcesz, to: COUNT(DISTINCT expression): oblicza wyrażenie dla każdego wiersza w grupie i zwraca liczbę unikatowych wartości, które nie mają wartości null.

+4

Dziękuję. Z jakiegoś powodu trudno mi konceptualizować zapytania SQL. To działa idealnie. – somacore

+4

Jak mogę uzyskać COUNT DISTINCT wpisów na podstawie więcej niż jednej kolumny? Próbowałem zrobić "SELECT COUNT (DISTINCT col1, col2)", ale "COUNT" wydaje się interpretować to jako złą liczbę argumentów. –

+3

@ Beetersn: Proponuję zadać osobne pytanie –

13

spróbuj tego:

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 
11
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type 
64

Musiałem uzyskać liczbę wystąpień każdej odrębnej wartości. Kolumna zawierała informacje o regionie. Prosta zapytań SQL skończyło się był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 
+1

W postgresql, możesz po prostu użyć 'count (*)' zamiast 'count (*) AS count'. – ogirginc

+0

hej @ Netsi1964 to samo zapytanie jest używane, ale chcę Region, State, Count, może być możliwe? Proszę mi pomóc –

18

Trzeba utworzyć tabelę temp dla różnych kolumn, a następnie kwerendy liczyć z tym stole

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

tutaj dt jest tabela temp

+0

Dziękuję! Używałem wielu SQL w moim życiu w wielu bazach danych i po raz pierwszy musiałem zakwalifikować go jako tabelę tymczasową z "jak X". – Mmm

+2

Należy pamiętać, że normalną terminologią dla "dt" jest tutaj _derived_ table, a nie temp table – 8forty

-5
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 
-1

ten jest dobrym przykładem, gdzie chcesz uzyskać liczbę kodu PIN, który przechowywany w ostatniej z pola adresu

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