J'ai ce bit de code: 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? P> p>
7 Réponses :
p>
Comme avec l'autre réponse similaire, cela ne fonctionnera pas. Où va-t-il obtenir des valeurs pour Project code> et
financier_year code> 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 ...
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 quelque chose comme ceci: P> 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>
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
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 code> 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é.
Utilisation: Le seul moyen d'obtenir zéro compte est d'utiliser un externe code> Joindre sur une liste des valeurs distinctes que vous souhaitez voir zéro compte pour . p> p>
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
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
C'est ce que je cherchais. Fonctionne comme charme.
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
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
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 ...?