sql >> Database >  >> RDS >> PostgreSQL

Postgres-kolom bestaat niet

Bewerkt:het geciteerde hoofdlettergebruik is de vraag. In de uitvoer van de tweede fout hieronder kun je zien dat Postgres niet van de hoofdletters houdt. Het heeft de gewoonte om alles in kleine letters te zetten, tenzij je forceert met " aanhalingstekens.

--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;

Ik zou overwegen om hoofdletters en aanhalingstekens te verwijderen. Het gaat alleen maar hoofdpijn opleveren. Als een kanttekening, je zou de linker join slechts één keer kunnen schrijven door:

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

Je zou ook kunnen maken

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",

in een functie om van de vervelende redundantie af te komen.




  1. Werken met hulpmiddelen op het scherm in Access 2019

  2. kan ik een alleen-lezen database openen vanuit de res/asset-map in Android zonder te kopiëren naar de databasemap?

  3. CTE en de verjaardagsparadox

  4. Kan record niet in SQLite-database invoegen vanuit Firebase Message Service wanneer de app op de achtergrond of gesloten is