In SQL Server 2005 heb ik een tafel cm_production
die alle code bevat die in productie is gebracht. De tabel heeft een ticket_number
, program_type
, program_name
EN push_number
Samen 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 dt
een 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)