Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Une requete qui me bloque

4 réponses
Avatar
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.

4 réponses

Avatar
Pierre BOUSQUET
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'


Avatar
Jacques Trepp
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.
Avatar
Jerome PAULIN
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
Avatar
Jacques Trepp
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)