Wartość z tabeli podrzędnej w kolumnie

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.

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

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
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
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.

0

@john_doe:

Poszukaj nt słowa pivot

1 użytkowników online, w tym zalogowanych: 0, gości: 1