recherche

Maison  >  Questions et réponses  >  le corps du texte

Utiliser Case pour soustraire le prix dans MySQL

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粉627136450P粉627136450283 Il y a quelques jours539

répondre à tous(1)je répondrai

  • P粉111927962

    P粉1119279622024-04-06 00:04:01

    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

    répondre
    0
  • Annulerrépondre