2017-10-13 2 views
0
I have a result set such as: 

    Code  No 
    1   * 
    1   - 
    1   4 
    1   
    1 

Maintenant, je veux fondamentalement une requête qui a 2 colonnes, un compte pour le montant total et un nombre pour ceux qui n'ont pas de chiffres. Je suppose que cela nécessite un groupe de et un nombre mais comment puis-je faire les 2 différents comptes dans une requête comme celle-ci?GROUP BY avec COUNT condition

ce que j'avais jusqu'à présent, mais je suis un peu coincé avec le reste

SELECT CODE,NO 
Sum(Case when No IN ('*', '-', '') then 1 else 0 end) as Count 

Répondre

7

Je pense que vous fondamentalement juste besoin GROUP BY:

SELECT CODE, 
     SUM(Case when No IN ('*', '-', '') then 1 else 0 end) as Count, 
     COUNT(*) as total 
FROM t 
GROUP BY CODE; 
0

Eh bien, cela a pris un moment :-), cependant ici c'est ... J'ai utilisé une instruction CASE pour créer et remplir la colonne No_Number; la base de données attribue à la ligne de la table d'origine la valeur 1 si la valeur de la table d'origine est un nombre ou lui attribue une valeur NULL et la supprime du COUNT si ce n'est pas le cas. Puis, quand il fait le compte, il est seulement reconnaître les valeurs qui étaient à l'origine des chiffres et en ignorant tout le reste ..

Si le jeu de résultats est dans une table de table ou temp:

SELECT Code, 
     COUNT(CASE WHEN [No] NOT LIKE '[0-9]' THEN 1 ELSE NULL END) AS No_Number, 
     COUNT(Code) AS Total 
FROM <tablename> 
GROUP BY Code 

Si le jeu de résultats est le produit d'une requête précédente, vous pouvez utiliser une expression CTE (Common Table Expression) pour arriver au résultat requis ou vous pouvez inclure des parties de ce code dans la requête précédente.