Count (*) selecteren met onderscheiden

In SQL Server 2005 heb ik een tafel cm_productiondie alle code bevat die in productie is gebracht. De tabel heeft een ticket_number, program_type, program_nameEN push_numberSamen met andere kolommen.

Doel: tel alle verschillende programmaraten per programmatype en druknummer.

Wat ik tot nu toe heb, is:

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

Dit krijgt me daaraan, maar het telt alle programmakamen, niet de verschillende (die ik niet verwacht te doen in die query). Ik denk dat ik gewoon mijn hoofd kan inpakken rond hoe je het moet vertellen om alleen de duidelijke programmanamen te tellen zonder ze te selecteren. Of iets.


Antwoord 1, Autoriteit 100%

Tel alle verschillende programmamamen per programmatype en druknummer

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(*)Brengt een rij terug voor elke unieke telling. Wat u wilt is COUNT(DISTINCT <expression>): Evalueert expressie voor elke rij in een groep en retourneert het aantal unieke, niet-null-waarden.


Antwoord 2, Autoriteit 16%

Ik moest het aantal voorkomen van elke duidelijke waarde krijgen. De kolom bevatte regio info.
De eenvoudige SQL-query waarmee ik eindigde was:

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

Dat zou me een lijst geven zoals, laten we zeggen:

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

Antwoord 3, autoriteit 8%

U moet een afgeleide tabel maken voor de afzonderlijke kolommen en vervolgens de telling van die tabel opvragen:

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

Hier is dteen afgeleide tabel.


Antwoord 4, autoriteit 2%

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

Antwoord 5, autoriteit 2%

probeer dit:

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

Antwoord 6

Dit is een goed voorbeeld waarbij u het aantal pincodes wilt zien dat is opgeslagen in het laatste adresveld

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

Other episodes