{SQL Server} Somme de deux requêtes imbriquée
Résolu
yanouk
-
yanouk -
yanouk -
Bonjour,
voici ma requête :
petite explication :
ma première requête retourne les montants par représentant où la devise est l'€ (par défault "Currency Factor" = 0)
ma deuxième requête retourne les montants par représentant où la devise est différent de l'€ ("Currency Factor" est donc différent de 0)
je converti donc ce montant avec "Currency Factor" pour obtenir un montant en €
mon problème :
je voudrais faire une addition des deux requêtes imbriquées afin d'obtenir une seule colonne.
est-t-il possible de faire cela ?
merci bien pour votre aide!
voici ma requête :
SELECT distinct b.[Code], ( select cast(sum(a.Amount) as numeric(10,2)) FROM [Sales Line] a , [Sales header] where a.[Document No_]=[Sales header].No_ and b.[Code]=a.[PfsSalesperson Code] and [Sales header].[Currency Factor]=0 ), ( select cast((sum(a.Amount)*(1/[Sales header].[Currency Factor])) as numeric(10,2)) FROM [Sales Line] a , [Sales header] where a.[Document No_]=[Sales header].No_ and b.[Code]=a.[PfsSalesperson Code] and [Sales header].[Currency Factor]<>0 group by [Sales header].[Currency Factor] ) FROM [Salesperson_Purchaser] b where b.[Code] between '100' and '199' group by b.[Code] order by b.[Code]
petite explication :
ma première requête retourne les montants par représentant où la devise est l'€ (par défault "Currency Factor" = 0)
ma deuxième requête retourne les montants par représentant où la devise est différent de l'€ ("Currency Factor" est donc différent de 0)
je converti donc ce montant avec "Currency Factor" pour obtenir un montant en €
mon problème :
je voudrais faire une addition des deux requêtes imbriquées afin d'obtenir une seule colonne.
est-t-il possible de faire cela ?
merci bien pour votre aide!
Configuration: Windows XP Firefox 3.0.11
6 réponses
-
impek!! ça marche très bien!
j'avais également trouver une solution mais il me ramener une erreur de division par 0
du coup j'étais obligé de mettre la devise en dur dans ma requête pour quelle fonctionne..pas top!
en tout cas je te remercie vraiment, tu m'a vraiment aidé!
@+
yanouk -
Bonjour,
J'ai un peu changé le code et je l'ai testé avec SQL Server (pas les mêmes tables) et je n'ai plus d'erreur de syntaxeSELECT distinct b.[Code], (select sum( CASE [Sales header].[Currency Factor] WHEN 0 THEN a.Amount ELSE (a.Amount * (1/[Sales header].[Currency Factor])) END) FROM [Sales Line] a , [Sales header] where a.[Document No_]=[Sales header].No_ and b.[Code]=a.[PfsSalesperson Code]) as MontantTotal FROM [Salesperson_Purchaser] b where b.[Code] between '100' and '199'
J'ai aussi retiré le group by et order by car cela n'est pas nécessaire quand on utilise DISTINCT
A plus -
Bonjour,
Le code suivant devrait faire ce que tu veuxSELECT distinct b.[Code], (( select cast(sum(a.Amount) as numeric(10,2)) FROM [Sales Line] a , [Sales header] where a.[Document No_]=[Sales header].No_ and b.[Code]=a.[PfsSalesperson Code] and [Sales header].[Currency Factor]=0 ) + ( select cast((sum(a.Amount)*(1/[Sales header].[Currency Factor])) as numeric(10,2)) FROM [Sales Line] a , [Sales header] where a.[Document No_]=[Sales header].No_ and b.[Code]=a.[PfsSalesperson Code] and [Sales header].[Currency Factor]<>0 group by [Sales header].[Currency Factor] )) as MontantTotal FROM [Salesperson_Purchaser] b where b.[Code] between '100' and '199' group by b.[Code] order by b.[Code]
J'ai remplacé la , par le signe + entre les deux résultats.
A plus -
non cela ne fonctionne pas, désolé j'avais oublié de préciser que j'avais tester ça!
en fait j'ai tester pas mal de choses sans parvenir à mes fin...:(
espérant que un de vous aura une solution!
merci quand même pour l'aide
++ -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
Peux-tu alors essayer le code suivantSELECT distinct b.[Code], sum( (select CASE [Sales header].[Currency Factor] WHEN 0 THEN a.Amount ELSE (a.Amount * (1/[Sales header].[Currency Factor])) END FROM [Sales Line] a , [Sales header] where a.[Document No_]=[Sales header].No_ and b.[Code]=a.[PfsSalesperson Code] )) as MontantTotal FROM [Salesperson_Purchaser] b where b.[Code] between '100' and '199' group by b.[Code] order by b.[Code]
Je ne l'ai pas testé, à toi de voir.
A plus -
je n'avais pas pensé au case c'est vrai, cela semblé une très bonne solution mais...erreur ;(
il me dit :
Impossible d'exécuter une fonction d'agrégation sur une expression comportant un agrégat ou une sous-requête.
Les éléments ORDER BY doivent se retrouver dans la liste de sélection si SELECT DISTINCT est spécifié.
j'ai essayer de bidouyer autour de ça mais rien à faire...
une autre solution peut-être?!!^^
merci quand même
++