मेरे पास दो टेबल हैं, table1 और table2

मैं जानकारी को एक और एक ही उत्तर में समूहित करके, दो तालिकाओं को id से जोड़ना चाहता हूं।

तालिका1:

╔════╦══════════════╦
║ id ║  product_id  ║
╠════╬══════════════╬
║  1 ║      123     ║
║  2 ║      456     ║
║  3 ║      789     ║
╚════╩══════════════╩

तालिका2:

╔════╦══════════════╦══════════════╦
║ id ║    status    ║     date     ║
╠════╬══════════════╬══════════════╬
║  1 ║   received   ║    02/20     ║
║  1 ║   shipped    ║    03/20     ║
║  2 ║   received   ║    04/20     ║
║  2 ║   shipped    ║    05/20     ║
║  3 ║   received   ║    06/20     ║
║  3 ║   shipped    ║    07/20     ║
╚════╩══════════════╩══════════════╩

मुझे यह आउटपुट चाहिए:

╔════╦══════════════╦══════════════╦══════════════╦
║ id ║    r_date    ║   s_date     ║  product_id  ║
╠════╬══════════════╬══════════════╬══════════════╬
║  1 ║     02/20    ║    03/20     ║     123      ║
║  2 ║     04/20    ║    05/20     ║     456      ║
║  3 ║     06/20    ║    07/20     ║     789      ║
╚════╩══════════════╩══════════════╩══════════════╩

मुझे यह परिणाम कैसे मिल सकता है?

4
Vince 29 जिंदा 2020, 19:39

2 जवाब

सबसे बढ़िया उत्तर

आप दो LEFT JOINs का उपयोग कर सकते हैं, जैसे:

select
  a.id,
  r.date as r_date,
  s.date as s_date,
  a.product_id
from table1 a
left join table2 r on r.id = a.id and r.status = 'received'
left join table2 s on s.id = a.id and s.status = 'shipped'
1
The Impaler 29 जिंदा 2020, 19:42

आप सशर्त एकत्रीकरण को table2 को table1 पर पिवट करने के लिए कर सकते हैं:

select 
    t1.id, 
    max(case when t2.status = 'received' then t2.date end) r_date,
    max(case when t2.status = 'shipped' then t2.date end) s_date,
    t1.product_id
from table1 t1
inner join table2 t2 on t.id = t2.id
group by t1.id, t2.product_id
order by t1.id
3
GMB 29 जिंदा 2020, 19:46