Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kwerenda krzyżowa z jednej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
ze4lot
Witam

Posiadam tabelę 'sub_order' (sub_order_Id | tool_id | client_id)
oraz dwie tabele 'tools' (tool_id, tool_name) oraz 'clients' (client_id, client_name).

Potrzebuję stworzyć zapytanie sql tak aby wygenerowało mi tabelę krzyżową, gdzie kolumny to elementy tool_name, a wiersze to elementy client_name. Na skrzyżowaniach suma wierszy gdzie pojawiają się tool_id z tlient_id.
Generalnie chodzi o zaprezentowanie ile danych narzędzi kupili poszczególni klienci.

Bardzo proszę o pomoc w stworzeniu zapytania, a szczególnie będę wdzięczny jeśli ktoś poda jakiś ciekawy link z wyjaśnieniem podobnego problemu.
mmmmmmm
  1. SELECT
  2. client_id,
  3. Count(CASE WHEN tool_id=1 THEN order_id END) tool1,
  4. Count(CASE WHEN tool_id=2 THEN order_id END) tool2,
  5. Count(CASE WHEN tool_id=3 THEN order_id END) tool3,
  6. ...
  7. FROM
  8. sub_order
  9. GROUP BY client_id
ze4lot
@mmmmmmm

Dzięki za pomoc ale szukam rozwiązania gdzie ilość unikalnych elementów tool oraz client jest nieznana.

EDIT:

Dla lepszego zrozumienia o co mi chodzi poniżej moja wizja tego co powinno zwrócić zapytanie:
  1. ______| maciek | michał | tomek | ...
  2. bułka | 3 | 0 | 6 | ...
  3. banan | 3 | 2 | 2 | ...
  4. masło | 1 | 4 | 1 | ...
  5. ... | ... | ... | ... | ...
bpskiba
Przykro mi, ale MySQL nie posiada gotowej funkcji tworzącej tebele przestawne.
Taki mechanizm istnieje w produktach Microsoftu czyli MSSQL. Jest to funkcja PIVOT
Oczywiście, w MySQL da się to również wykonać, ale trzeba napisać np. własną funkcję...

W googlach pod hasłem mysql pivot znajdziesz trochę pomysłów, ale wszystkie mają swoje dobre i złe strony.
Swoją drogą może php.net zaproponuje konkurs na napisanie takiej uniwersalnej funkcji





(konkurs może być z nagrodami)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.