2011-12-12 3 views
1

Bon, j'utilise MySQL depuis si longtemps que j'ai oublié combien il est plus facile d'utiliser MS SQL. J'ai des problèmes avec ce qui devrait être une simple requête imbriquée.Problèmes avec une requête imbriquée SQL CE

J'ai deux tables, groupes et membres de groupe.

J'essaie de sélectionner des données de groupes et un nombre d'enregistrements de membres_groupe en utilisant groups.id comme paramètre de sous-requête.

Voici la requête que je utilise:

SELECT id AS [Group ID], 
     type, 
     name, 
     (SELECT COUNT(1) FROM group_members WHERE (group_id = [Group ID]) AND (paid = 1)) + '/' + (SELECT COUNT(1) FROM group_members WHERE (group_id = [Group ID])) 
FROM groups 

Pour chaque groupe cela me montrer le type, le nom, et combien ont payé sous forme fractionnée (à savoir « 6/10 »).

Lorsque j'essaie d'utiliser cette requête dans SQL CE, j'obtiens une erreur: "Une erreur est survenue lors de l'analyse de la requête."

Si j'exécute les requêtes séparément, elles fonctionnent correctement, donc je suppose qu'il y a un problème avec la façon dont SQL CE gère les requêtes imbriquées par rapport à la méthode de MySQL.

Tout conseil serait grandement apprécié!

Répondre

2

Pour tout le monde intéressé, j'ai finalement réussi à accomplir cela en faisant une jointure gauche des sous-requêtes au lieu de les appeler dans l'instruction SELECT principale.

Voici la requête de travail:

SELECT grps.group_name, 
     CASE 
       WHEN members1.paid_count IS NULL 
        THEN 0 
       ELSE members1.paid_count 
     END AS paid, 
     CASE 
       WHEN members2.member_count IS NULL 
        THEN 0 
       ELSE members2.member_count 
     END AS total_members 
FROM groups AS grps 
LEFT JOIN (SELECT group_id, COUNT(id) AS paid_count FROM group_members WHERE paid = 1 GROUP BY group_id) AS members1 ON grps.id = members1.group_id 
LEFT JOIN (SELECT group_id, COUNT(id) AS member_count FROM group_members GROUP BY group_id) AS members2 ON grps.id = members2.group_id