Une requete qui me bloque

Le
Jacques Trepp
Bonjour,
Je cale sur une requète. Le contexte :

dans ma table 'lignes de ticket', j'ai une colonne qui indique qu'un
article a été offert ou non (det_ticket.pforce = 2 si oui, 0 sinon)
Je voudrais faire une requète qui m'affiche
l'article, la quantité vendue, la quantité offerte.

Voici un exemple de ce que j'ai commencé à faire.

select det_ticket.id_art, libelle, qte, pxvttc, num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where det_ticket.pforce = 2 and datfct >= '20100111' ;

Merci d'avance.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre BOUSQUET
Le #20950751
soit avec un équivalent WD à 'CASE WHEN'

select det_ticket.id_art, libelle
, CASE WHEN det_ticket.pforce = 0 THEN qte ELSE 0 END as qte
, CASE WHEN det_ticket.pforce = 2 THEN qte ELSE 0 END as offert
, pxvttc, num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where datfct >= '20100111'



soit avec UNION



select det_ticket.id_art, libelle, SUM(qte), SUM(offert) as offert ...
from (
select det_ticket.id_art, libelle, 0 as qte, qte as offert, pxvttc,
num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where det_ticket.pforce = 2 and datfct >= '20100111'
UNION
select det_ticket.id_art, libelle, qte, 0 as offert, pxvttc,
num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where det_ticket.pforce = 0 and datfct >= '20100111'
)
group by det_ticket.id_art, libelle...


Jacques Trepp avait soumis l'idée :
select det_ticket.id_art, libelle, qte, pxvttc, num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where det_ticket.pforce = 2 and datfct >= '20100111'


Jacques Trepp
Le #20954631
Pierre BOUSQUET vient de nous annoncer :
soit avec un équivalent WD à 'CASE WHEN'

select det_ticket.id_art, libelle
, CASE WHEN det_ticket.pforce = 0 THEN qte ELSE 0 END as qte
, CASE WHEN det_ticket.pforce = 2 THEN qte ELSE 0 END as offert
, pxvttc, num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where datfct >= '20100111'



soit avec UNION



select det_ticket.id_art, libelle, SUM(qte), SUM(offert) as offert ...
from (
select det_ticket.id_art, libelle, 0 as qte, qte as offert, pxvttc,
num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where det_ticket.pforce = 2 and datfct >= '20100111'
UNION
select det_ticket.id_art, libelle, qte, 0 as offert, pxvttc, num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where det_ticket.pforce = 0 and datfct >= '20100111'
)
group by det_ticket.id_art, libelle...


Jacques Trepp avait soumis l'idée :
select det_ticket.id_art, libelle, qte, pxvttc, num_poste,
datfct, hrfct from det_ticket
inner join ticket on det_ticket.id_ticket = ticket.id_ticket
inner join article on det_ticket.id_art = article.id_art
where det_ticket.pforce = 2 and datfct >= '20100111'





Merci beaucoup Pierre ! :)
je connaissais le Case..When sur postgresql, mais pas sur mysql.
c'est parfait.
Jerome PAULIN
Le #20956051
Jacques Trepp a écrit :

Merci beaucoup Pierre ! :)
je connaissais le Case..When sur postgresql, mais pas sur mysql.
c'est parfait.





C'est dans MySQL depuis les versions 5 il me semble.
Sinon tu aurais pu t'en sortir avec des if() imbriqués.

gg
Jacques Trepp
Le #20956921
Jerome PAULIN avait prétendu :
Jacques Trepp a écrit :

Merci beaucoup Pierre ! :)
je connaissais le Case..When sur postgresql, mais pas sur mysql.
c'est parfait.





C'est dans MySQL depuis les versions 5 il me semble.
Sinon tu aurais pu t'en sortir avec des if() imbriqués.

gg



ça fonctionne chez moi avec la version 4.0.10a , sans le savoir.
(faut dire que j'utilise principalement postgresql)
Publicité
Poster une réponse
Anonyme