Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PostgreSQL]Warunek where dla nowej kolumny
Forum PHP.pl > Forum > Przedszkole
kamelek
Witam,
witam mam takie troche lamerskie pytanie bo nie iwem jak zapytac o to wujka google

jezeli mam cos takiego

  1.  
  2. SELECT id_indeksu, indeks, (case when coś_tam then coś_tam end) AS ilosć
  3. FROM coś_tam
  4. WHERE ilosc > 0
  5.  


To taki przykład

PostgrSQL zgłasz mi

  1. ERROR: COLUMN "ilosc" does NOT exist
  2. LINE 1: ... WHERE coś_tam AND coś_tam AND ilosc >0


Czy coś robie nie tak ?
b4rt3kk
Może dlatego, że alias to ilosć a sprawdzasz ilosc? (zwróć uwagę na ostatnią literkę?).
kamelek
Zapytanie wygląda tak

  1. SELECT
  2. id_indeksu,
  3. indeks,
  4. nazwa_indeksu,
  5. case when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))> 0 then 1
  6. when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))= 0 AND
  7. tmp.ilo_na_dost(28,id_indeksu) > 0 then 2 else tmp.ilo_na_dost(28,id_indeksu) end AS STATUS
  8. FROM g.gm_indeksy WHERE rodzaj_materialu3 IN (4,5) AND pole3 = 0 --and status > 0



jesli usune -- to wyskakuje komunikat
literówek zadnych nie ma :/
viking
Spróbuj alias z małej litery i opakowany w "".
kamelek
  1. SELECT
  2. id_indeksu,
  3. indeks,
  4. nazwa_indeksu,
  5. case when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))> 0 then 1
  6. when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))= 0 AND
  7. tmp.ilo_na_dost(28,id_indeksu) > 0 then 2 else tmp.ilo_na_dost(28,id_indeksu) end AS sss
  8. FROM g.gm_indeksy WHERE rodzaj_materialu3 IN (4,5) AND pole3 = 0 AND sss > 0


W poscie wyzej mi BBCode zmieniel słówko status na duze litery byly z małej

Z "" też nie działa zresztą już wcześniej próbowałem, a zapytanie pod wzgledem logicznym wygląda ok ?
viking
Wygląda raczej ok. Schematy mają ustawioną ściężkę przeszukiwania (SET search_path)? Ale to chyba byłby inny błąd.
mmmmmmm
Nazwy kolumnom nadawane są na samym końcu.
Można twój problem rozwiązać na parę sposobów:
  1. SELECT * FROM (SELECT
  2. id_indeksu,
  3. indeks,
  4. nazwa_indeksu,
  5. case when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))> 0 then 1
  6. when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))= 0 AND
  7. tmp.ilo_na_dost(28,id_indeksu) > 0 then 2 else tmp.ilo_na_dost(28,id_indeksu) end AS sss
  8. FROM g.gm_indeksy WHERE rodzaj_materialu3 IN (4,5) AND pole3 = 0) x WHERE sss>0

  1. SELECT
  2. id_indeksu,
  3. indeks,
  4. nazwa_indeksu,
  5. case when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))> 0 then 1
  6. when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))= 0 AND
  7. tmp.ilo_na_dost(28,id_indeksu) > 0 then 2 else tmp.ilo_na_dost(28,id_indeksu) end AS sss
  8. FROM g.gm_indeksy WHERE rodzaj_materialu3 IN (4,5) AND pole3 = 0 AND case when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))> 0 then 1
  9. when (i.ilosc_na_mag(3,id_indeksu)+i.ilosc_na_mag(5,id_indeksu)+i.ilosc_na_mag(9,id_indeksu))= 0 AND
  10. tmp.ilo_na_dost(28,id_indeksu) > 0 then 2 else tmp.ilo_na_dost(28,id_indeksu) end>0

  1. z zastosowaniem WITH (nie chce mi się pisać)

kamelek
dzięki mmmmmmm, właśnie sam też do tego doszedłem smile.gif
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-2025 Invision Power Services, Inc.