ORA-00904: "MOJE": invalid identifier

ORA-00904: "MOJE": invalid identifier
BI
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:18
0

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

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

edytowany 2x, ostatnio: bizzy
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
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

Kopiuj
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

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber
Marcin.Miga
Możesz też grupować tak: GROUP BY 1,2,3,4,5,6... Gdzie kolejne liczby to numery kolumn. (tak samo przy sortowaniu)
LD
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:115
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

fourfour
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 9 lat
  • Postów:627
1

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

BI
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:18
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.

fourfour
@abrakadaber napisał Ci, że masz grupować, tylko nie używając aliasów.
BI
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:18
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

edytowany 1x, ostatnio: bizzy
LD
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:115
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

BI
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:18
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?

edytowany 1x, ostatnio: bizzy
LD
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:115
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.

edytowany 1x, ostatnio: Ldr
BI
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 9 lat
  • Postów:18
0

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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)