Affichage horizontal des résultats d'une requête [Résolu]

o06 10 Messages postés lundi 4 août 2008Date d'inscription 21 mai 2010 Dernière intervention - 25 févr. 2010 à 18:02 - Dernière réponse : nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention
- 2 mars 2010 à 19:11
Bonjour le forum,

Comment procéder pour afficher les résultats horizontalement d'une requête ?

REF TAILLE QTE

REFA TAILLE1 2
REFA TAILLE2 0
REFA TAILLE3 6
REFB TAILLE1 0
REFB TAILLE2 5
REFB TAILLE3 1

Est il possible d'avoir :

REF TAILLE1/QTE TAILLE2/QTE TAILLE3/QTE
REFA 2 0 6
REFB 0 5 1

Une piste ? Un grand merci d'avance.

Microsoft Management Console 3.0
Microsoft SQL Enterprise Manager 8.0
Afficher la suite 

5 réponses

Répondre au sujet
o06 10 Messages postés lundi 4 août 2008Date d'inscription 21 mai 2010 Dernière intervention - 2 mars 2010 à 17:41
+3
Utile
Re,

Bon je me réponds.
Pas à cause d'une éventuelle schizophrénie aigüe mais parce que peut être cela pourra aider d'autres novices dans l'embarras comme moi.

En fait 2 choses :
1 - la syntaxe CASE WHEN à modifier :
SUM(CASE WHEN dbo.F_ARTGAMME.EG_Enumere = 36 THEN dbo.F_GAMSTOCK.GS_QteSto ELSE 0 END) AS [36],

2 - supprimer dans le GROUP BY le paramètre concernant le champ [dbo.F_ARTGAMME.EG_Enumere
] (qui était requis avec l'ancienne syntaxe du CASE WHEN)

voilà.
A+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de o06
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 28 févr. 2010 à 22:22
0
Utile
Salut,

Si SQL SERVER >= 2005

Il y a la fonction pivot ou les cte
il faut regarder de ce coté

bon dev
Commenter la réponse de nhervagault
o06 10 Messages postés lundi 4 août 2008Date d'inscription 21 mai 2010 Dernière intervention - 1 mars 2010 à 11:33
0
Utile
Merci nhervagault,

je pense qu'effectivement l'opérateur Pivot devrait convenir. J'ai vu sur le net qu'il était recommandé pour se substituer à une construction avec CASE (Ce que j'essaie de faire en ce moment)
Par contre je ne trouve rien concernant la syntaxe dans la documentation et l'explication donnée sur le site MSDN pour (les opérateurs) PIVOT et UMPIVOT est pour le moins absconse ... (en tous les cas à mon niveau)

Qqun aurait il la générosité (et un peu de temps à perdre) pour me mettre sur la voie ?

Un grand Merki.

PS : CTE là je ne sais même pas de quoi on parle ?
Commenter la réponse de o06
o06 10 Messages postés lundi 4 août 2008Date d'inscription 21 mai 2010 Dernière intervention - 1 mars 2010 à 17:27
0
Utile
Re,

Bon déjà mauvaise nouvelle pour moi, nous sommes en SQL server 2000 (soit disant la version préconisée pour SAGE version SQL). L'opérateur PIVOT avait l'air nickel mais ca ne marche pas.

Donc je me suis rabattu sur l'utilisation du 'CASE WHEN'
Mais j'ai un souci que je n'arrive pas à résoudre avec cette méthode : j'ai autant de ligne que de résultats pour une référence.
Si je reprends l'exemple du dessus cela me donne :
REFA 2 0 0
REFA 0 0 6
REFB 0 5 0
REFB 0 0 1

alors que je voudrais
REFA 2 0 6
REFB 0 5 1

Je vous soumets rapidement ma requête en tenant compte que :
- la table F_ARTICLE me sert pour définir des critères de sélections
- la table F_GAMSTOCK contient les infos sur les qtés d'article pour chaque taille
- la table F_ARTGAMME contient l'intitulé de la taille
SELECT     dbo.F_GAMSTOCK.AR_Ref ,
CASE WHEN dbo.F_ARTGAMME.EG_Enumere = 36 THEN SUM(dbo.F_GAMSTOCK.GS_QteSto) END AS [36],
CASE WHEN dbo.F_ARTGAMME.EG_Enumere = 38 THEN SUM(dbo.F_GAMSTOCK.GS_QteSto) END AS [38],
CASE WHEN dbo.F_ARTGAMME.EG_Enumere = 40 THEN SUM(dbo.F_GAMSTOCK.GS_QteSto) END AS [40]

FROM         dbo.F_GAMSTOCK INNER JOIN
                      dbo.F_ARTICLE ON dbo.F_GAMSTOCK.AR_Ref = dbo.F_ARTICLE.AR_Ref INNER JOIN
                      dbo.F_ARTGAMME ON dbo.F_GAMSTOCK.AG_No1 = dbo.F_ARTGAMME.AG_No
WHERE     (dbo.F_ARTICLE.AR_Gamme1 3) AND (dbo.F_GAMSTOCK.GS_QteSto > 0) AND (dbo.F_ARTICLE.AR_Stat03 '1L')
GROUP BY dbo.F_GAMSTOCK.AR_Ref, dbo.F_ARTGAMME.EG_Enumere


un grand merki
Commenter la réponse de o06
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 2 mars 2010 à 19:11
0
Utile
Merci
Je ne connaissais pas cette syntaxe
le case dans le sum
Commenter la réponse de nhervagault

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.