ORA-00904: "MOJE": invalid identifier

0

Nie mam już pojęcia co jest źle ciągle wywala mi błąd próbowałem już na milion sposobów:

select to_char(a.invoice_date,'YYYY') as "ROK", to_char(a.invoice_date,'MM') as "MIESIAC", to_char(a.invoice_date,'Q') as "KWARTAL",a.indeks_pozycji,a.jm,a.nazwa_gr_asort,a.dbr_element_kolekcji,a.opis_kolekcji,a.wartosc_ngaso,a.opis_kolekcji,
a.dbr_podkolekcja,a.dbr_podkolekcja,a.dbr_kolor,a.dbr_rodzaj_kolekcji,a.format,a.dbr_rektyfikacja,a.gatunek,
a.symbol,a.dbr_data_wejscia_magazyn,a.dbr_data_wycofania,a.wartosc_forko,a.gr_cen_sprzedaz,
(CASE
    WHEN a.zaklad ='CPW' AND a.wartosc_ngaso LIKE 'GRES%' THEN 'CPW2'
    WHEN a.zaklad ='CPW' AND a.wartosc_ngaso LIKE 'DEKORACJE %' THEN 'CPW2'
    WHEN a.zaklad ='X' THEN 'CPO'
    ELSE a.zaklad
  END) as "MOJE",a.zaklad,a.wartosc_gprod,sum(a.ilosc_w_m2),sum(a.ilosc),sum(a.zafakt_wart_w_pln),sum(a.wart_licencji_w_pln), sum(a.wartosc_w_pln) from sales a
where a.invoice_date between to_date(20140501) AND to_date(20140507)
and a.Rodzaj_sprzedazy in ('L','S','EE')
and a.Gr_Klientow not in ('KPLWXXCERA','KPLWXXPARA','KPLWXXDPE')
group by "ROK","MIESIAC","KWARTAL", a.indeks_pozycji,a.jm,a.nazwa_gr_asort,a.dbr_element_kolekcji,a.opis_kolekcji,
a.wartosc_ngaso,a.opis_kolekcji,a.dbr_podkolekcja,a.dbr_podkolekcja,a.dbr_kolor,a.dbr_rodzaj_kolekcji,a.format,
a.dbr_rektyfikacja,a.gatunek,a.symbol,
a.dbr_data_wejscia_magazyn,a.dbr_data_wycofania,a.wartosc_forko,a.gr_cen_sprzedaz,"MOJE", a.zaklad, a.wartosc_gprod 

Może jakieś propozycje, bo przeczytałem dużo i dalej nic nie wiem.

2

nie możesz grupować po polach "nazwanych" - zamiast grupować po "MOJE" musisz po a.zaklad i po a.wartosc_ngaso i tak samo z "ROK", "MIESIAC" i "KWARTAL"

nie lepiej SQL wygląda tak

SELECT to_char(a.invoice_date, 'YYYY') AS "ROK",
	to_char(a.invoice_date, 'MM') AS "MIESIAC",
	to_char(a.invoice_date, 'Q') AS "KWARTAL",
	a.indeks_pozycji,
	a.jm,
	a.nazwa_gr_asort,
	a.dbr_element_kolekcji,
	a.opis_kolekcji,
	a.wartosc_ngaso,
	a.opis_kolekcji,
	a.dbr_podkolekcja,
	a.dbr_podkolekcja,
	a.dbr_kolor,
	a.dbr_rodzaj_kolekcji,
	a.format,
	a.dbr_rektyfikacja,
	a.gatunek,
	a.symbol,
	a.dbr_data_wejscia_magazyn,
	a.dbr_data_wycofania,
	a.wartosc_forko,
	a.gr_cen_sprzedaz,
	(
		CASE 
			WHEN a.zaklad = 'CPW'
				AND a.wartosc_ngaso LIKE 'GRES%'
				THEN 'CPW2'
			WHEN a.zaklad = 'CPW'
				AND a.wartosc_ngaso LIKE 'DEKORACJE %'
				THEN 'CPW2'
			WHEN a.zaklad = 'X'
				THEN 'CPO'
			ELSE a.zaklad
			END
		) AS "MOJE",
	a.zaklad,
	a.wartosc_gprod,
	sum(a.ilosc_w_m2),
	sum(a.ilosc),
	sum(a.zafakt_wart_w_pln),
	sum(a.wart_licencji_w_pln),
	sum(a.wartosc_w_pln)
FROM sales a
WHERE a.invoice_date BETWEEN to_date(20140501)
		AND to_date(20140507)
	AND a.Rodzaj_sprzedazy IN ('L', 'S', 'EE')
	AND a.Gr_Klientow NOT IN ('KPLWXXCERA', 'KPLWXXPARA', 'KPLWXXDPE')
GROUP BY "ROK",
	"MIESIAC",
	"KWARTAL",
	a.indeks_pozycji,
	a.jm,
	a.nazwa_gr_asort,
	a.dbr_element_kolekcji,
	a.opis_kolekcji,
	a.wartosc_ngaso,
	a.opis_kolekcji,
	a.dbr_podkolekcja,
	a.dbr_podkolekcja,
	a.dbr_kolor,
	a.dbr_rodzaj_kolekcji,
	a.format,
	a.dbr_rektyfikacja,
	a.gatunek,
	a.symbol,
	a.dbr_data_wejscia_magazyn,
	a.dbr_data_wycofania,
	a.wartosc_forko,
	a.gr_cen_sprzedaz,
	"MOJE",
	a.zaklad,
	a.wartosc_gprod
1

+1 do góry i podsyłam wyjaśnienie dla lepszego zrozumienia

http://ntsrikanth.blogspot.com/2007/11/sql-query-order-of-execution.html

1

O, i tu to samo, tylko dokładniej omówione - http://www.sqlpedia.pl/logiczne-przetwarzanie-zapytan-sql/

0

Lepiej wygląda zgoda, ale jak robię grupowanie bez tych pól to wyskakuje błąd
ORA-00979: not a GROUP BY expression i stąd mój problem.

0

Niby działa, ale nie grupuję mi tak jak chce. Jak widzicie chce pogrupować dane z danego miesiąca w całość tylko, że jak wezmę grupowanie po dacie to nie grupuje dobrze, bo każdy dzień grupuje osobno a ja chciałem aby łączyło miesiąc

0

Przypuszczam ze w tym miejscu Ci sie dane rozlaza
a.dbr_data_wejscia_magazyn,
a.dbr_data_wycofania
Zakladam ze to pelna data rok/miesiac/dzien

0

Nie rozłażą mi się tam. Problem polega na tym, że pole invoice_date jest datą i teraz chciałem aby rozbić to na 3 kolumny, zamieniając odpowiednio na rok, miesiąc i kwartał, bez rozróżniania dnia. I potem sprzedaż danego indeksu zgrupować w całość. Wiem teraz, że robiąc group by invoice_date on mi dalej grupuje po tym co ma w sobie czyli po dacie, dlatego chciałem grupować po kolumnach już zmienionych i przez to pisałem aliasy. Czemu nie można grupować np. tylko po jednej kolumnie?

1

to_char(a.invoice_date, 'YYYY') ,
to_char(a.invoice_date, 'MM') ,
to_char(a.invoice_date, 'Q')
Po tym pogrupuj a nie po samym a.invoice_date bo jak rozumiem teraz tak robisz.

/e
Ogólnie podczas grupowania wyswietlaj tylko te informacje po których chcesz grupowac. Pozniej jesli potrzebujesz wiecej informacji używaj np CTE i dojoinuj tabele zeby je wyciagnac.

0

Teraz rozumiem gdzie był błąd. Miło, że powiedziałeś mi o tych CTE nie wpadłem na to. Dzięki wielkie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1