Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łączenie wyników z kilku wierszy w jedną całość
Forum PHP.pl > Forum > Bazy danych > MySQL
dreadwax
Witam wszystkich,

Mam do rozwiązania jeden problem, z którym nie mogę sobie poradzić. Mam jeszcze sporo braków w konstruowaniu zapytań, ale mam nadzieje ze z czasem to się zmieni. Do rzeczy:

Posiadam tabelę zawierającą:

PK| Numer_id | RODZAJ OPŁATY | Opcja_1 | Opłata | Waga |
PK| Pole14 | Pole46 | Pole49 | Pole53 | Pole29|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| 85495 | Opłata standardowa | 0.00 | 11.00 | 2,5 |
| 85495 | Opłata paliwowa | 27.50 | 0.44 | 0,00 |
| 85495 | Zadeklarowana wartość | 490.98 | 0.66 | 0,00 |
| 85495 | Podatek | 0.00 | 2.67 | 0,00 |
| 85502 | Opłata standardowa | 0.00 | 11.00 | 2,9 |
| 85502 | Opłata paliwowa | 27.50 | 0.44 | 0,00 |
| 85502 | Zadeklarowana wartość | 564.75 | 0.66 | 0,00 |
| 85502 | Podatek | 0.00 | 2.67 | 0,00 |
| 85520 | Opłata standardowa | 0.00 | 11.00 | 2,5 |
| 85520 | Opłata paliwowa | 29.00 | 0.44 | 0,00 |
| 85520 | Zadeklarowana wartość | 712.29 | 0.66 | 0,00 |
| 85520 | Pobranie | 730.00 | 1.15 | 0,00 |


Potrzebuję otrzymać następujące zestawienie:

PK | Numer_id | Opłata Standardowa | Opłata paliwowa | Zadeklarowana wartość | Opłata za deklaracje | Pobranie | Opłata za pobranie | Waga |
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++
| | wartość z Opłata | wartość z Opłata | Wartość z Opłata | Wartość z opłata | wartość z Opcja_1 | Wartość z Opłata | Wartość z Waga |
|gdzie Pole46 zgodne |
|z nagłowkiem |

Problem polega na tym, że próbuję to zrobić na kilka sposobów i ciągle bezskutecznie. Wygląda to mniej więcej podobnie do Tabeli PIVOT w Excelu, jednak dla kilkudziesieciu tysiecy pozycji Excel pada na kolana...


Dla zliczenia poszczególnych numerów listów wybrałem wraz z ilością opłat wybrałem:

  1. SELECT Pole14, COUNT(Pole53) AS Numer_zamówienia
  2. FROM `upc_calosc`
  3. GROUP BY Pole14


Teraz pojawia się problem: jak do tego wyniku DODAĆ kolumny np. "Opłata paliwowa" tylko dla tych zamówień gdzie Opłata paliwowa jest naliczona, albo "Pobranie" dla tych gdzie Pobranie istnieje ?

HELP exclamation.gif!
Mchl
Tabela do normalizacji.

Można kombinować w ten sposób

Kod
SELECT DISTINCT tabela.PK, t1.Pole53 , t2.Pole53, t3.Pole53 ...
FROM tabela
LEFT JOIN
(
  SELECT * FROM tabela WHERE Pole46 = 'Opłata standardowa'
) AS t1 USING(PK)
LEFT JOIN (
  SELECT * FROM tabela WHERE Pole46 = 'Opłata paliwowa'
) AS t2 USING(PK)
LEFT JOIN (
  SELECT * FROM tabela WHERE Pole46 = 'Zadeklarowana wartość'
) AS t3 USING(PK)
...


ale to tak samo jak można zakłądać slipy na spodnie. Lepiej przekonstruować tabelę.
blawat
poszukaj sobie o warunku IF w zapytaniach sql
dreadwax
Rozdzieliłem tabele na kilka mniejszych, odpowiadających konkretnym zapytaniom. Teraz zwykłe JOIN i wszystko jest ok. Problem w tym, że tabela, którą podałem na początku to faktura, która zawsze ma taką postać, a analizować trzeba ją w specyficzny sposób. Po prostu za miesiąc czeka mnie kolejne rozbijanie faktury ...

oczywiście dziękuje za pomoc
Mchl
Jak zawsze ma taką postać, to zrób automat który zrobi to za Ciebie winksmiley.jpg
dreadwax
A czy istnieje jakiś sposób, aby wynik jednego zapytania zapisać do nowej tabeli?
W ten sposób mógłbym faktycznie tworzyć automatycznie tabele z odpowiednimi danymi...
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.