Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MS SQL] sumowanie komórek
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
ghost1511
Otóż posiadam tabele:
CODE
SYMBOL_ART ILOŚĆ
SC21075 4
SC24982 2
SC25014 9
SC25014 5
SCLA9D4002 1
SCLC1D115B7 3
SCLC1D115P7 1
SCLC2K0910P7 2
SCLC2K0910P7 7
SCRE11RCMU 3


wywolana zapytaniem
CODE
SELECT KLUCZ_DOK, ILOSC, KOD_KRESK, POZ_DOK.SYMBOL_ART
FROM POZ_DOK
left JOIN ARTYKULY on ARTYKULY.SYMBOL_ART = POZ_DOK.SYMBOL_ART
WHERE KLUCZ_DOK LIKE ''


jak zesumowac rekordy o tym samym symbolu ?
Wezyr
No więc proponuję tak:
  1. SELECT KLUCZ_DOK, sum(ILOSC) as ILOSC, KOD_KRESK, POZ_DOK.SYMBOL_ART
  2. FROM POZ_DOK
  3. left JOIN ARTYKULY on ARTYKULY.SYMBOL_ART = POZ_DOK.SYMBOL_ART
  4. WHERE KLUCZ_DOK LIKE '' GROUP BY POZ_DOK.SYMBOL_ART
ghost1511
CODE
SELECT KLUCZ_DOK, sum(ILOSC) as ILOSC, KOD_KRESK, POZ_DOK.SYMBOL_ART
FROM POZ_DOK
left JOIN ARTYKULY on ARTYKULY.SYMBOL_ART = POZ_DOK.SYMBOL_ART
WHERE KLUCZ_DOK LIKE 'PZ/1 /10/000180' GROUP BY SYMBOL_ART


Nie wiem dlaczego ale nie rozpoznaje SYMBOL_ART
CODE
Msg 208, Level 16, State 1, Line 1
Invalid object name 'POZ_DOK'.

Wezyr
Spróbuj poprawić zapytanie: po ON użyj nawiasu, a po GROUP BY dodaj jeszcze nazwę tabeli bo w obu masz kolumnę SYMBOL_ART:
Kod
SELECT KLUCZ_DOK, sum(ILOSC) as ILOSC, KOD_KRESK, POZ_DOK.SYMBOL_ART
FROM POZ_DOK
left JOIN ARTYKULY on (ARTYKULY.SYMBOL_ART = POZ_DOK.SYMBOL_ART)
WHERE KLUCZ_DOK LIKE 'PZ/1 /10/000180' GROUP BY POZ_DOK.SYMBOL_ART

Jak nadal nie zadziała to napisz jakie masz struktury tabeli w bazie.
ghost1511
CODE
Msg 8120, Level 16, State 1, Line 1
Column 'POZ_DOK.KLUCZ_DOK' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


struktur niestety nie jestem w stanie podać, sam dopiero zapoznaje się z ta baza

chwilowo rozwiązałem problem sumując rekordy w php, więc sprawa nie jest już priorytetowa.
trafas
Zakładając, że tabele wyglądają mniej więcej tak:


  1. CREATE TABLE POZ_DOK(
  2. SYMBOL_ART int,
  3. KLUCZ_DOK varchar(20),
  4. ILOSC int
  5. )
  6.  
  7. CREATE TABLE ARTYKULY
  8. (
  9. SYMBOL_ART int,
  10. KOD_KRESK int
  11. )
  12.  
  13. -- insert into POZ_DOK
  14. -- select 1,'PZ/1 /10/0001801',4
  15. -- select 2,'PZ/1 /10/0001801',3
  16. -- select 3,'PZ/1 /10/0001801',5
  17. -- select 1,'PZ/1 /10/0001802',4
  18. -- select 2,'PZ/1 /10/0001802',3
  19.  
  20. INSERT INTO ARTYKULY
  21. -- select 1,123
  22. -- select 2,456
  23. -- select 3,789
  24.  
  25.  
  26. SELECT * FROM ARTYKULY
  27. SELECT * FROM POZ_DOK




Możesz wywołać swoje zapytanie tak:


  1. SELECT
  2. KLUCZ_DOK,
  3. sum(ILOSC) AS ILOSC,
  4. KOD_KRESK,
  5. pd.SYMBOL_ART
  6. FROM POZ_DOK pd
  7. LEFT JOIN ARTYKULY a ON a.SYMBOL_ART = pd.SYMBOL_ART
  8. WHERE KLUCZ_DOK LIKE '%PZ/1 /10/000180%'
  9. GROUP BY KLUCZ_DOK,KOD_KRESK,pd.SYMBOL_ART




  1. SELECT KLUCZ_DOK, sum(ILOSC) AS ILOSC, KOD_KRESK, POZ_DOK.SYMBOL_ART
  2. FROM POZ_DOK
  3. LEFT JOIN ARTYKULY ON (ARTYKULY.SYMBOL_ART = POZ_DOK.SYMBOL_ART)
  4. WHERE KLUCZ_DOK LIKE 'PZ/1 /10/000180' GROUP BY POZ_DOK.SYMBOL_ART


W zapytaniu wyżej wyrzuciło Ci błąd, ponieważ zapytanie pobiera wartości z 3 różnych kolumn, i aby funkcja agregująca zadziałała musi być zgodność pomiędzy ilością pobieranych kolumn a ilością kolumn agregowanych.
Dodatkowo proponują korzystać z aliasów tabel - czytelniejszy kod.
Przy wykorzystaniu LIKE koszystaj z %, inaczej zapytanie zwróci pustą tabelę.

Jednak aby zadziałała suma, musisz zrezygnować z niektórych kolumn.
Poniżej SELECT zliczający wystąpienia artykułu na różnych POZ_DOK:


  1. SELECT
  2. pd.SYMBOL_ART,
  3. KOD_KRESK,
  4. sum(ILOSC) AS ILOSC
  5. FROM POZ_DOK pd
  6. INNER JOIN ARTYKULY a ON a.SYMBOL_ART = pd.SYMBOL_ART
  7. WHERE KLUCZ_DOK LIKE '%PZ/1 /10/000180%'
  8. GROUP BY pd.SYMBOL_ART,KOD_KRESK


Pozdrawiam.
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-2024 Invision Power Services, Inc.