Menggunakan Case untuk menolak harga dalam Mysql
P粉627136450
P粉627136450 2024-04-05 11:18:53
0
1
507

Saya ada 3 jadual: jadual_latihan, diskaun_latihan dan ejen. jadual_latihan: id, nama, id_ejen, harga. diskaun_latihan: id, id_ejen, id_jadual, diskaun. Agen: ID, nama

Saya cuba menolak harga daripada jadual latihan_jadual menggunakan lajur diskaun dalam jadual latihan_diskaun seperti ini:

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;

Tapi takpe, walaupun agent_id sama, harga total column masih sama macam dulu. Apa yang boleh salah dengan pertanyaan saya? Inilah SQLfiddle jika anda memerlukannya: http://sqlfiddle.com/#!9/0cd42d/1/0

P粉627136450
P粉627136450

membalas semua(1)
P粉111927962

Anda tidak perlu menggunakan group by kerana anda tidak menggunakan sebarang fungsi agregat.

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;

Anda juga menggunakan fungsi select case。另一种选择是使用 mysql if() dengan salah.

if(agent_id = 2, price - td.discount, price) as total
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan