Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2011, 10h03   #1
Invité de passage
 
Femme
Étudiant
Inscription : avril 2011
Messages : 32
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 32
Points : 0
Points : 0
Par défaut Comment corriger une requete SQL avec l'erreur Subquery returns more than 1 row

bonjour,

J'ai une requete qui dois calculer la somme de la différence entre deux DateTime,
mon problem que les sous requetes retourne plus qu'une ligne(c'est ce que je veux) donc l'opération de calcule de date génére une erreur "Subquery returns more than 1 row",
l'opération que je veux est somme ((D1-D2)(D3-D4)(D5-D6))
mais selon la requete elle ne peut effectuer que D1-D2!

comment je peux corriger mon requete ?

Code :
1
2
3
4
5
6
7
8
9
10
11
 SELECT Sum(TIME_FORMAT(TIMEDIFF((SELECT changegroup.CREATED
    FROM changegroup,changeitem
    WHERE changegroup.id=changeitem.groupid
    AND oldString='Closed'
    AND changegroup.issueid=10301 ),(SELECT changegroup.CREATED
    FROM changegroup,changeitem
    WHERE changegroup.id=changeitem.groupid
    AND newString='Closed'
    AND changegroup.issueid=10301 )), '%Hh and %i min and %s')) AS TimeSpent
    FROM changegroup,changeitem
    WHERE changegroup.id=changeitem.groupid

les resultats des deux sous requetes et la structure des deux tables utilisés se trouvent dans la pièce jointe

Merci d'avance
Images attachées
Type de fichier : gif first subquery.gif (1,9 Ko, 0 affichages)
Type de fichier : gif second subquery.gif (1,9 Ko, 0 affichages)
Type de fichier : jpg MCD.JPG (16,6 Ko, 0 affichages)
ramoucha23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 10h16   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Vos sous requetes vous rammenent plus d'une ligne, vous devez donc regardez vos conditions de restriction, afin de les affiner et ainsi ne recuperer qu'une seule et unique ligne...
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 10h38   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Il nous faudrait a structure des tables pour pouvoir vous aider plus, car comme en plus la modélisation semble incorrecte, il est difficile des les deviner, mais sur le principe :

Vous n'avez je pense pas besoin de sous requête pour cela, et pour y voir plus clair, vous pouvez construire votre requete en plusieurs étapes :
1/ effectuez des jointures afin d'avoir vos deux changegroup.CREATED sur la même ligne
2/ calculez la différence entre ces deux colonnes
3/ Enfin effectuez la somme de ces differences

Pour ce qui est des jointures, depuis près de 20 ans maintenant, elles s’écrivent plutôt comme ceci :

Code SQL :
1
2
3
4
5
 
SELECT ...
FROM A
INNER JOIN B
    ON A.id= B.idA
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h51.


 
 
 
 
Partenaires

Hébergement Web