11
votes

Comment retourner un compte (*) de 0 au lieu de null

J'ai ce bit de code: xxx

où il ne renvoie aucune ligne lorsque le nombre est zéro. Comment puis-je faire apparaître ces lignes avec l'ensemble HighRiskCount comme 0?


2 commentaires

Pouvez-vous confirmer que les données existent à avoir Risk_1 = 3 mais avec un nombre de zéro?


Comment les données pourraient-elles exister lorsque le comte est zéro ...?


7 Réponses :


-1
votes

2 commentaires

Comme avec l'autre réponse similaire, cela ne fonctionnera pas. Où va-t-il obtenir des valeurs pour Project et financier_year si les rangées ne sont pas là pour leur fournir?


Vous avez raison, j'ai compris cela environ 3 secondes après que j'ai posté. C'est des moments comme celui-ci, j'aimerais qu'il y ait un moyen de supprimer, mais je suppose que la prochaine fois que je prendrai 3 secondes supplémentaires pour penser avant de soumettre ... Upvote venant à Ya ...



11
votes

Vous ne pouvez pas sélectionner les valeurs dans la table lorsque le nombre de lignes est égal à 0. Où obtiendrait-il les valeurs des lignes inexistantes?

Pour ce faire, vous devrez avoir une autre table qui définit votre liste du projet VALAY CODE> et FINAUX_YEAR CODE> Valeurs. Vous sélectionnerez ensuite dans cette table, effectuez un joindre rejoindre code> sur votre table existante, puis effectuez le groupement. P>

quelque chose comme ceci: P>

SELECT l.Project, l.Financial_Year, COUNT(t.Project) AS HighRiskCount
INTO #HighRisk 
FROM MasterRiskList l
left join #TempRisk1 t on t.Project = l.Project and t.Financial_Year = l.Financial_Year
WHERE t.Risk_1 = 3
GROUP BY l.Project, l.Financial_Year


4 commentaires

Point clé. Toutes les autres réponses jusqu'à présent, manquez ceci. Quelles valeurs seraient placées dans Projet et Financial_Year pour les lignes lorsque le comte est égal à zéro?


Il sélectionne le projet et l'exercice à partir de la liste maîtresse, de sorte qu'il affichera ceux quand le compte est zéro, je suppose.


@Jamesjiao: le masterrisklist est quelque chose que j'ai ajouté à ma requête à titre d'exemple; Ce n'est pas dans la requête de l'OP.


Je sais .. Qu'est-ce que j'ai mentionné.



2
votes

Utilisation: xxx

Le seul moyen d'obtenir zéro compte est d'utiliser un externe Joindre sur une liste des valeurs distinctes que vous souhaitez voir zéro compte pour .


0 commentaires

0
votes

SQL a généralement un problème de retour des valeurs qui ne sont pas em> dans une table. Pour accomplir cela (sans procédure stockée, vous aurez besoin d'une autre table contenant les valeurs manquantes.

En supposant que vous souhaitez une ligne par projet / une combinaison d'exercice, vous aurez besoin d'une table contenant chacun Projet valide, Finanical_Year Combinaison: P>

 SELECT HR.Project, HR.Financial_Year, COUNT(HR.Risk_1) AS HighRiskCount
 INTO #HighRisk HR RIGHT OUTER JOIN ProjectYears PY
   ON HR.Project = PY.Project AND HR.Financial_Year = PY.Financial_Year
 FROM #TempRisk1
 WHERE Risk_1 = 3
 GROUP BY HR.Project, HR.Financial_Year


0 commentaires

5
votes

En supposant que vous avez votre "projet" et "Financial_Year" où Risk_1 est différent de 3 3, et ce sont ceux que vous avez l'intention d'inclure.

SELECT Project, Financial_Year, SUM(CASE WHEN RISK_1 = 3 THEN 1 ELSE 0 END) AS HighRiskCount
INTO #HighRisk 
FROM #TempRisk1
GROUP BY Project, Financial_Year


1 commentaires

C'est ce que je cherchais. Fonctionne comme charme.



0
votes

Peu plus longtemps, mais qu'en soit-il comme une solution?

IF EXISTS (
        SELECT *
        FROM #TempRisk1
        WHERE Risk_1 = 3
    )
    BEGIN
        SELECT Project, Financial_Year, COUNT(*) AS HighRiskCount
        INTO #HighRisk 
        FROM #TempRisk1
        WHERE Risk_1 = 3
        GROUP BY Project, Financial_Year
    END
ELSE
    BEGIN
        INSERT INTO #HighRisk 
            SELECT 'Project', 'Financial_Year', 0
    END


0 commentaires

9
votes

Enveloppez votre Sélectionnez CODE> Query dans un ISNULL CODE>:

SELECT ISNULL((SELECT Project, Financial_Year, COUNT(*) AS hrc
INTO #HighRisk 
FROM #TempRisk1
WHERE Risk_1 = 3
GROUP BY Project, Financial_Year),0) AS HighRiskCount


0 commentaires