Wartość z tabeli podrzędnej w kolumnie

Wartość z tabeli podrzędnej w kolumnie
JD
  • Rejestracja: dni
  • Ostatnio: dni
0

Hej,

załóżmy takie relacje ( jedna rezerwacja - wiele płatności ):
RESERVATION (id, name, surname)
PAYMENTS(id, reservation_id, amount)

i teraz wiadomo, że zwykły select obu tych tabel powieli wiersze gdy >1 payment

Czy można napisać taki select ( to jest mysql ) aby każdy payments.amount był w osobnej kolumnie ( nie powielając tym samym wierszy )?
max 4 paymenty per rezerwacja....
?
np.

Kopiuj
select r.id, r.surname, group_concat(p.amount) from reservations r join payments p on r.id=p.reservation.id

daje mi rezultat z amount w jednej kolumnie po przecinku

LB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 75
1

Która wersja MySQL? Jeśli od 8.0, to:

  • najpierw select z PAYMENTS i dodatkowa kolumna z dense_rank dzieląc po reservation_id
  • z tego robisz
Kopiuj
select reservation_id, 
       max(case when dodatkowa_kolumna_z_dense_rank = 1 then amount else null end) as amount1
       max(case when dodatkowa_kolumna_z_dense_rank = 2 then amount else null end) as amount2
       ...       
  from payments_z_dense_rank
group by reservation_id
FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 218
0

Należy przy tym pamiętać, że liczba kolumn z poszczególnymi płatnościami jest stała - zdefiniowana przez Ciebie.
Takie rzeczy zaciąga się wierszami właśnie.

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
0

@john_doe:

Poszukaj nt słowa pivot

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.