Utiliser Case pour soustraire le prix dans MySQL
P粉627136450
P粉627136450 2024-04-05 11:18:53
0
1
503

J'ai 3 tables : training_schedules, training_discounts et agents. training_schedules : identifiant, nom, agent_id, prix. training_discounts : id, agent_id, planning_id, remise. Agent : pièce d'identité, nom

J'ai essayé de soustraire le prix de la table training_schedules en utilisant la colonne discounts de la table training_discounts comme ceci :

SELECT ts.id, name, training_types, DATE_FORMAT(date_start ,'%d/%m/%Y') as date_start, 
                DATE_FORMAT(date_end ,'%d/%m/%Y') as date_end, quota, price, td.discount,
                CASE price WHEN td.agent_id = 2  THEN (price - td.discount) ELSE price END as total   
                FROM training_schedules ts
                LEFT JOIN training_discounts td on ts.id = td.schedule_id GROUP BY td.schedule_id;

Mais non, même si l'agent_id est le même, le prix de la colonne totale est toujours le même qu'avant. Qu'est-ce qui ne va pas avec ma requête ? Voici le SQLfiddle si vous en avez besoin : http://sqlfiddle.com/#!9/0cd42d/1/0

P粉627136450
P粉627136450

répondre à tous(1)
P粉111927962

Vous n'avez pas besoin d'utiliser group by car vous n'utilisez aucune fonction d'agrégation.

SELECT ts.id
  , name
  , training_types
  , DATE_FORMAT(date_start ,'%d/%m/%Y') as date_start
  , DATE_FORMAT(date_end ,'%d/%m/%Y') as date_end
  , quota, price
  , td.discount  
  , CASE WHEN td.agent_id = 2 THEN price - td.discount ELSE price END as total   
FROM training_schedules ts
LEFT JOIN training_discounts td on ts.id = td.schedule_id;

Vous utilisez également la fonction select case。另一种选择是使用 mysql if() de manière incorrecte.

if(agent_id = 2, price - td.discount, price) as total
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal