Problem z selectem (invalid column reference)

0

Mam taki utworzony select:

select nazwa_dostawcy, data_transakcji, nazwa_surowca,kolor, (cena+(cena*0.22))*ilosc_surowca as wartosc_dost from dostawcy, zaopatrzenie, specyfikacja_dostawy ,surowce ,rodzaj_surowca where dostawcy.iddostawcy=zaopatrzenie.dostawcy_iddostawcy and specyfikacja_dostawy.zaopatrzenie_idtransakcji=zaopatrzenie.idtransakcji and specyfikacja_dostawy.surowce_idsurowca=surowce.idsurowca and rodzaj_surowca.idrodzaj_surowca=surowce.rodzaj_surowca_idrodzaj_surowca 
group by nazwa_dostawcy 

Po jego odpaleniu pojawia się następujący błąd:

 Error at line 1
Dynamic SQL Error
SQL error code = -104
invalid column reference

wg mnie problem leży w tabeli utworzonej w relacji wiele do wielu, jednak nie jestem w stanie sobie z nim poradzić. W załączniku dodałem model mojej bazy

1

A gdzie masz agregat? Po co grupujesz, skoro nie masz funkcji agregującej? O aliasach to chyba słyszałeś, bo uzyłeś przy polu obliczeniowym. Możesz je z powodzeniem stosować do tabel. Ale o JOINach to chyba nie słyszałeś...

0

To group by to pozostałość, bo ten select był jeszcze bardziej rozbudowany. A czy wyświadczyłbyś mi przysługę, przerabiając ten kod, wg Twojego pomysłu? Będę bardzo wdzięczny

0

tu nie potrzeba pomyslu, tylko uzycia inner join

2
SELECT
 nazwa_dostawcy
,data_transakcji
,nazwa_surowca
,kolor
,(cena+(cena*0.22))*ilosc_surowca AS wartosc_dost
FROM dostawcy
INNER JOIN zaopatrzenie ON dostawcy.iddostawcy=zaopatrzenie.dostawcy_iddostawcy
INNER JOIN specyfikacja_dostawy ON specyfikacja_dostawy.zaopatrzenie_idtransakcji=zaopatrzenie.idtransakcji
INNER JOIN surowce ON specyfikacja_dostawy.surowce_idsurowca=surowce.idsurowca
INNER JOIN rodzaj_surowca ON rodzaj_surowca.idrodzaj_surowca=surowce.rodzaj_surowca_idrodzaj_surowca

Nie wiem z jakich tabel są pola w SELECT i w związku z tym nie nadałem aliasów, a przydałoby się to zrobić...

0

Potrzebuję jeszcze pomocy:

 CREATE VIEW Transakcje_z_dostawcami ("Nazwa dostawcy","Liczba transakcji","Wartość brutto","Wartość netto")
AS SELECT  nazwa_dostawcy,count(iddostawcy),sum((cena+(cena*0.22))*ilosc_surowca),
sum(cena*ilosc_surowca)
FROM dostawcy D
INNER JOIN zaopatrzenie Z ON D.iddostawcy=Z.dostawcy_iddostawcy
INNER JOIN specyfikacja_dostawy SD ON SD.zaopatrzenie_idtransakcji=Z.idtransakcji
INNER JOIN surowce S ON SD.surowce_idsurowca=S.idsurowca
group by nazwa_dostawcy

Widok się ładnie tworzy, jednak podczas jego podglądania wyskakuje błąd "invalid database key". Wiem już, że problem tkwi w funkcjach agregacyjnych, ale nie wiem jak to ominąć.

Błąd ten też wyskakuje przy takim prostym widoczku:

 CREATE VIEW "DS" ("id","liczba") 
AS SELECT dostawcy_iddostawcy, count(dostawcy_iddostawcy) from  zaopatrzenie
group by dostawcy_iddostawcy
;
1

Btw. nie napisałeś nigdzie jaka to baza i w której wersji. Z tego co się orientuję niektóre wersje Interbase (wszystkie?) oraz MySQL nie wspierają GROUP BY w widokach. Z kolei nowsze wersje MySQL mają problemy z grupowaniem w widoku więcej niż jednej tabeli gdy jeden z rekordów nie ma odpowiadającej relacji.

0

Używam interbase'a w wersji 8.1. Group by musi być, ponieważ w ogóle nie stworzy mi tego widoku (wyskakuje błąd). Nikt nie ma żadnego pomysłu?

0
  1. kto tak nazywa pola: "Nazwa dostawcy","Liczba transakcji","Wartość brutto","Wartość netto"??? Za to się powinno ręce ucinać!!!
  2. wklej tu DDL do tych tabelek
  3. czemu IB a nie FB?

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