Problème de requete - SQL/NoSQL - Programmation
Marsh Posté le 27-02-2006 à 11:39:32
isa21493 a écrit :
|
C'est normal que "bug 2" ne soit pas remonté il a un id=3 et dans ta requete tu fais un
Code :
|
Enleve le where et tu auras tout tes résultats ...
isa21493 a écrit : |
tu n'en as pas besoin mais il est tout a fait possible de jointer une table sur elle-même...
Marsh Posté le 27-02-2006 à 11:50:28
en fait mon where est normal
je veux faire le compte des bugs ayant eu lieu sur le projet n°1 (pas dans le 3)
et donc je voudrais que pour le bug 2, le résultat soit 0 car ya un bug 2 mais dans le projet 3 alors qu'il n'y en a pas dans le projet 1
si j'enleve le where j'ai les résultats pour tous les projets, ce n'est pas ce que je veux
Marsh Posté le 27-02-2006 à 12:02:51
si j'ai tout compris tu veux remonter tous les bugs ayant un "id projet" égal 1 même ceux qui existent pas?
Comment définis tu "ceux qui n'existent pas"? C'est ceux qui sont présents dans la table mais avec un autre id projet?
Marsh Posté le 27-02-2006 à 12:12:29
ceux qui n'existent pas ce sont ceux qui existent dans la table mais qui n'ont pas d'id = 1
Marsh Posté le 27-02-2006 à 13:22:06
Et en faisant un JOIN LEFT sur la même table? Ca donnerait quoi?
Marsh Posté le 27-02-2006 à 13:27:59
essaye un truc comme ça pour voir:
Code :
|
Marsh Posté le 27-02-2006 à 13:33:54
Solution bête et méchante :
Code :
|
Marsh Posté le 27-02-2006 à 13:39:15
skeye a écrit : Solution bête et méchante :
|
Oui mais
si tu un "name" présent pour id=1 et id!=1 tu te retrouves dans les résultats avec deux fois ce "name" une fois à X et une fois à 0...
Ou alors faut faire péter un not exist dans la 2eme requete!
Marsh Posté le 27-02-2006 à 13:42:32
anapajari a écrit : Oui mais |
ah oui, un peu trop bête, sur le coup.
'fin bref, on voit l'idée, quoi...
Marsh Posté le 27-02-2006 à 13:57:32
merci pour votre aide
mais je me perds dans ma requete:
en fait la mienne est plus compliquée:
code:
SELECT table_custom_field_string_table_0.value AS 'Area', Count(table_custom_field_string_table_0.bug_id) AS 'Current'
FROM base.table_bug_table table_bug_table_0, base.table_custom_field_string_table table_custom_field_string_table_0
WHERE (table_bug_table_0.project_id=8) AND (table_bug_table_0.category='bug') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id) OR (table_bug_table_0.project_id=19) AND (table_bug_table_0.category='bug') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id) OR (table_bug_table_0.project_id=20) AND (table_bug_table_0.category='bug') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id) OR (table_bug_table_0.project_id=8) AND (table_bug_table_0.category='support') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id) OR (table_bug_table_0.project_id=19) AND (table_bug_table_0.category='support') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id) OR (table_bug_table_0.project_id=20) AND (table_bug_table_0.category='support') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id) OR (table_bug_table_0.project_id=8) AND (table_bug_table_0.category='correction') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id) OR (table_bug_table_0.project_id=19) AND (table_bug_table_0.category='correction') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id) OR (table_bug_table_0.project_id=20) AND (table_bug_table_0.category='correction') AND (table_bug_table_0.status<>80 And table_bug_table_0.status<>90) AND (week(table_bug_table_0.last_updated,7)=week(NOW(),7)) AND (YEAR(table_bug_table_0.last_updated)=YEAR(NOW())) AND (table_custom_field_string_table_0.field_id=1) AND (table_bug_table_0.id=table_custom_field_string_table_0.bug_id)
GROUP BY table_custom_field_string_table_0.value
Marsh Posté le 27-02-2006 à 13:59:45
euh, t'as pas un moyen plus simple d'écrire ça?
Ca m'a l'air de beaucoup se répéter, tout ça...
Marsh Posté le 27-02-2006 à 14:00:47
Code :
|
je récupère ceci:
area: ---------- current:
nord ----------- 10
sud ------------ 5
est ------------ 1
et je voudrais
area: ---------- current:
nord ----------- 10
sud ------------ 5
est ------------ 1
ouest ----------- 0
ces 2 champs font parties de la meme table mais j'ai une autre table avec une jointure où je fais des where
Marsh Posté le 27-02-2006 à 14:02:54
Code :
|
Marsh Posté le 27-02-2006 à 14:04:21
ben en fait ça s'écrit comme ça automatiquement dans MS Query
Marsh Posté le 27-02-2006 à 14:10:41
skeye a écrit : euh, t'as pas un moyen plus simple d'écrire ça? |
+1 ... enfin +28 même là ... c'est vraiment immonde
A mon avis tu pourras pas tout faire en une seule requête ( bien que la solution de skeye ou la mienne marchent doivent marcher).
Faisant une qui remonte que les id=1 et une autre qui remonte que les id!=1 et n'existant pas dans les résultats de la 1ere tu iras plus vite
Marsh Posté le 27-02-2006 à 14:24:21
Code :
|
Résultat :
NAME,COMPTEDEID
bug 1,2
bug 2,0
bug 3,1
bug 4,1
(testé sous Oracle, mais il me semble que la syntaxe de SQL Server pour le CASE est la même)
Marsh Posté le 27-02-2006 à 14:25:43
et ce serait pas possible de mettre ça:
Code :
|
le problème c'est qu'il ne connait pas IIF
mais peut être qu'il existe autre chose de ce style, non?
Marsh Posté le 27-02-2006 à 14:29:39
Code :
|
j'ai mis ça mais ça me met une erreur "expression de la colonne incorrecte: Count(CASE WHEN mantis_custom_field_string_table_0.bug_id)>0 "
Marsh Posté le 27-02-2006 à 14:31:03
(ce genre de sport c'est très spécifique au SGBD utilisé, en général...)
Marsh Posté le 27-02-2006 à 14:49:24
question mais mantis ça tourne sur mysql et pas mssql non?
Par ailleurs tu t'es trompé(e) dans la recopie de la requete de beegee:
Code :
|
Marsh Posté le 27-02-2006 à 14:59:38
ça ne marche quand meme pas.
j'ai essayé la solution avec UNION
ça marche sauf que ça me met 2 fois les name si elles sont dans l'une et l'autre
Code :
|
comment dois je faire pour enlever les doublons?
Marsh Posté le 27-02-2006 à 15:03:23
et comment faire pour que le résultat soit par ordre alphabétique?
car là j'ai d'abord par exemple
bug1
bug3
bug4
bug2
Marsh Posté le 27-02-2006 à 15:09:18
Essaye plutôt comme ça (y a quelques différences d'utilisation du mot clé CASE entre SQL Server et Oracle) :
Code :
|
plus d'infos ici si ça ne marche pas :
http://msdn.microsoft.com/library/ [...] o_5t9v.asp
Marsh Posté le 27-02-2006 à 15:12:43
isa21493 a écrit : |
anapajari a écrit : Oui mais |
Comme je te le disais il faut rajouter un not exist dans la 2eme requete
isa21493 a écrit : et comment faire pour que le résultat soit par ordre alphabétique? |
Lire la doc ça aide souvent, et ce quelque soit le SGBD. Regarde du coté de l'instruction ORDER.
Par ailleurs, les trois solutions proposées fonctionnent (celle de beegee, skeye ou la mienne) a toi de les adapter à ta requête et pas a nous de faire le boulot à ta place!
Marsh Posté le 27-02-2006 à 15:14:59
merci
ça ne marche pas, je vais regarder ça
pour l'ordre c bon j'ai trouvé mais qqun sait il comment enlever mon doublon avec ma formule en haut?
Marsh Posté le 27-02-2006 à 15:15:51
oui mais le not exist je le met où? je suis pas douée je sais lol mais ce que j'ai essayé ne marche pas
Marsh Posté le 27-02-2006 à 15:27:04
c bon j'ai trouvé
merci à tous pour votre aide.
bonne fin de journée
Marsh Posté le 27-02-2006 à 15:40:46
Ce serait sympa de mettre la solution maintenant, si jamais quelqu'un tombe sur ce sujet et en a besoin ...
Marsh Posté le 27-02-2006 à 11:24:00
bonjour à tous,
voici un exemple de ce que je fais et de ce que je veux:
j'ai une table "bugs":
name: ------------ id
bug 1 -------------- 1
bug 1 -------------- 1
bug 2 -------------- 3
bug 3 -------------- 1
bug 4 -------------- 1
ma requete est la suivante:
là je récupère ceci:
bug 1 -------------- 2
bug 3 -------------- 1
bug 4 -------------- 1
et moi ce que je voudrais c'est
bug 1 -------------- 2
bug 2 -------------- 0
bug 3 -------------- 1
bug 4 -------------- 1
je ne peux pas utiliser de jointure puisque c'est dans la meme table.
savez vous comment faire?