Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Microsoft SQL Server / MSDE _ [Subiekt] Zestawienie zamówień

Napisany przez: Tomplus 6.06.2017, 11:45:09

Zaczynam zabawę z MS SQL, ale ledwo co, to na każdym kroku mam jakieś problemy które dużo prościej rozwiązuje się na MySQL. Więc postanowiłem napocić trochę treści tutaj :)
Proszę więc o pomoc w sprawie rozwiązania problemu a zarazem wskazanie rozwiązania, abym mógł rozwiązać taki problem w innych przypadkach.

Komunikat jaki się pokazuje to:

Kod
Each GROUP BY expression must contain at least one column that is not an outer reference.

Rozumiem, że nie może być żadnej referencji zewnętrznej, ale co jeżeli chce grupować właśnie takiej kolumnie?

Celem jest zsumowanie wartosci sprzedazy, kosztów i zysków z danych miesięcy, dla dokumentu z zawartoscia INTERNET, a w przyszłości także innych.

  1. SELECT
  2. MAX(dataZamowienia) miesiacRozliczeniowy
  3. ,COUNT(1) liczbaZamowien
  4. ,SUM(CenatowarowNETTO) WartoscSprzedazyNETTO
  5. ,SUM(kosztyNETTO) KosztySprzedazyNETTO
  6. ,SUM(zyskNETTO) ZyskSprzedazyNETTO
  7.  
  8. FROM (
  9. SELECT *, (CenatowarowNETTO - kosztyNETTO) zyskNETTO
  10. FROM (
  11. SELECT
  12. MAX(Dok.dok_WartTwNetto) CenatowarowNETTO
  13. ,SUM(Poz.ob_Ilosc * Poz.ob_CenaMag) kosztyNETTO
  14. ,MAX(FORMAT(Dok.dok_DataMag, 'yyyy-MM')) dataZamowienia
  15. FROM dok_Pozycja Poz
  16. LEFT JOIN dok__Dokument Dok ON Poz.ob_DokHanId = Dok.dok_Id
  17. WHERE
  18. UPPER(Dok.dok_NrPelnyOryg) LIKE '%INTERNET%'
  19. AND Poz.ob_CenaMag > 0
  20. AND Dok.dok_DataMag BETWEEN '2017-06-01 00:00:00' AND '2017-06-30 00:00:00'
  21. GROUP BY Poz.ob_DokHanId
  22. ) a
  23. ) b
  24. GROUP BY dataZamowienia;


Problem z zapytaniem został rozwiązany.

Błędem były apostrofy oraz alias dla grupowania.
Poprawiłem zapytanie, może komuś się przyda.

Do zamknięcia.

Napisany przez: nospor 6.06.2017, 11:47:47

A wlasnie mialem pisac, ze chyba "troche" przedobrzyles z tymi apostrofami wink.gif

Napisany przez: Tomplus 6.06.2017, 11:58:57

Dobrze powiedziane, że trochę.
I jeszcze pomyliłem apostrofy ` z ', przy czym okazało się że te ` - wywalają błąd w MS SQL.

Napisany przez: nospor 6.06.2017, 12:25:21

Bo w mssql uzywa sie []

SELECT [jakas_kolumna] FROM tabela

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)