Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łączenie wyników z kilku wierszy w jedną całość, Problem z zapytaniem mysql łączącym kilka wierszy w jeden
dreadwax
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.06.2010

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/exclamation.gif) !
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


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

Ten post edytował Mchl 23.06.2010, 11:59:22
Go to the top of the page
+Quote Post
blawat
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 17.03.2006

Ostrzeżenie: (0%)
-----


poszukaj sobie o warunku IF w zapytaniach sql
Go to the top of the page
+Quote Post
dreadwax
post
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.06.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Mchl
post
Post #5





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Jak zawsze ma taką postać, to zrób automat który zrobi to za Ciebie (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
dreadwax
post
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.06.2010

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Mchl
post
Post #7





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


http://dev.mysql.com/doc/refman/5.1/en/insert-select.html
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.09.2025 - 22:37