191 votes

Equivalent Sql Server d'une fonction agrégée COUNTIF

Je construis une requête avec un GROUP BY qui doit pouvoir compter les enregistrements en fonction d'une certaine condition (par exemple, compter uniquement les enregistrements pour lesquels une certaine valeur de colonne est égale à 1).

SELECT  UID, 
        COUNT(UID) AS TotalRecords, 
        SUM(ContractDollars) AS ContractDollars,
        (COUNTIF(MyColumn, 1) / COUNT(UID) * 100) -- Get the average of all records that are 1
FROM    dbo.AD_CurrentView
GROUP BY UID
HAVING  SUM(ContractDollars) >= 500000

El COUNTIF() échoue évidemment puisqu'il n'y a pas de fonction SQL native appelée COUNTIF mais l'idée ici est de déterminer le pourcentage de toutes les lignes qui ont la valeur '1' pour MaColonne.

Avez-vous des idées sur la manière de mettre en œuvre correctement ce système dans un environnement MS SQL 2005 ?

1voto

Michal Points 11

Pourquoi pas comme ça ?

SELECT count(1)
FROM AD_CurrentView
WHERE myColumn=1

1voto

Fernando68 Points 365

Dans mon cas, j'ai dû utiliser COUNTIF() dans le cadre de mes colonnes SELECT ET pour imiter un % du nombre de fois où chaque élément apparaissait dans mes résultats.

Alors j'ai utilisé ce...

SELECT COL1, COL2, ... ETC
       (1 / SELECT a.vcount 
            FROM (SELECT vm2.visit_id, count(*) AS vcount 
                  FROM dbo.visitmanifests AS vm2 
                  WHERE vm2.inactive = 0 AND vm2.visit_id = vm.Visit_ID 
                  GROUP BY vm2.visit_id) AS a)) AS [No of Visits],
       COL xyz
FROM etc etc

Bien entendu, vous devrez formater le résultat en fonction de vos besoins d'affichage.

-2voto

Andres Sarria Points 1
SELECT COALESCE(IF(myColumn = 1,COUNT(DISTINCT NumberColumn),NULL),0) column1,
COALESCE(CASE WHEN myColumn = 1 THEN COUNT(DISTINCT NumberColumn) ELSE NULL END,0) AS column2
FROM AD_CurrentView

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X