Comment utiliser une sous-requête dans sql server 2008?
Je sais que cette question peut être répété ... Mais j'ai une requête comme ça, j'ai un champ "Compute_CRM_State" dans ma table. Et ce champ contient des données comme "approuvé,en attendant,annulé" mais maintenant, je veux extraire nombre total de approuvé ou en cours ou annulé. Je l'ai essayé avec sous-requête. Je peux en mesure d'obtenir nombre total de approuvé ou en cours ou annulé mais.. je me suis même dossiers à de nombreuses reprises.
requête :
SELECT (SELECT COUNT(Compute_CRM_State) AS Expr1
FROM CRM_Doctor_Request
WHERE (CRM_State_Id = 1)) AS PENDING,
(SELECT COUNT(Compute_CRM_State) AS Expr2
FROM CRM_Doctor_Request AS CRM_Doctor_Request_3
WHERE (CRM_State_Id = 2)) AS Approved,
(SELECT COUNT(Compute_CRM_State) AS Expr3
FROM CRM_Doctor_Request AS CRM_Doctor_Request_2
WHERE (CRM_State_Id = 3)) AS CANCELLED
FROM CRM_Doctor_Request AS CRM_Doctor_Request_1
Il doit être affiché à seulement 1 record de compter.. mais il est possible d'afficher le nombre de fois que le nombre d'enregistrements dans la table contient.
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle vous ne recevaient pas le nombre total correctement et obtenir de nombreux dossiers au lieu de cela, c'est que le
COUNT
s sont sélectionné comme une sous-requête corrélée, de sorte que vous aurez obtenu le nombre de pièces pour chaque enregistrement dans la table.Pour corriger cela, vous devez utiliser la fonction d'agrégation dans la requête externe, et non pas à partir de la corrélation subuery. Et demandez à ceux qui comptent un total pour chaque état, l'utilisation de la
CASE
expression pour ce faire comme suit:SQL Violon Démo
Ou: vous pouvez utiliser le
PIVOT
table de l'opérateur de faire la même chose:Comme ceci.