sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres-kolumnen finns inte

Redigerat:Den citerade versaler fyller frågan. I utgången av det andra felet nedan kan du se att Postgres inte gillar versaler. Det har en vana att skriva allt med små bokstäver om du inte tvingar med " citat.

--fails
select a
from
(select 1 as "A") as t;

--fails
select A
from
(select 1 as "A") as t;

--works
select "A"
from
(select 1 as "A") as t;

psql:new.sql:5: ERROR:  column "a" does not exist
LINE 1: select a
               ^
psql:new.sql:10: ERROR:  column "a" does not exist
LINE 1: select A
               ^
 A 
───
 1
(1 row)


select ...
timeloggedToday.date_logged "DATE_LOGGED_TODAY",
-- should be: timeloggedToday."DATE_LOGGED" "DATE_LOGGED_TODAY",

...

LEFT JOIN
  (SELECT app_user.lower_user_name,
          to_char(startdate, '%Y-%m-%d') AS "DATE_LOGGED",
          Sum(timeworked) / 3600 "TIME_IN_HOURS",
          startdate - Now() "DIFFERENCE_DAYS"
   ...
  ) timeloggedToday ON timeloggedToday.lower_user_name = users.author;

Jag skulle fundera på att bli av med versaler och kurser. Det kommer bara att orsaka huvudvärk. Som en sidoanteckning kan du skriva den vänstra anslutningen bara en gång genom att:

-- instead of enumerating each possible interval  
WHERE to_char(Now() - INTERVAL '8 days', '%Y-%m-%d') < to_char(startdate, '%Y-%m-%d')
-- select the interval
now()::date - start_date as diff
-- then build up your columns like:
case(case when diff=0 then date_logged else null end) as date_logged_today
case(case when diff=1 then date_logged else null end) as date_logged_yesterday
-- and so on ...

Du kan också göra

CASE
   WHEN Ifnull(timeloggedToday.time_in_hours, 0) = 0 THEN 'No Time Logged'
   WHEN timeloggedToday.time_in_hours < 3.0 THEN 'User has not logged sufficient time' 
   ELSE 'user has logged sufficient time'
 END "STATUS_TODAY",

till en funktion för att bli av med den tråkiga redundansen.




  1. MySQL felkod:1175 under UPPDATERING i MySQL Workbench

  2. SQL RANK() kontra ROW_NUMBER()

  3. NHibernate-mappning för Oracle INTERVAL DAY TO SECOND datatyp

  4. Hur RLIKE fungerar i MariaDB