On May 9, 2007, at 10:32 AM, Kirk Wythers wrote:



Here is a more elaborate version, I'm trying to add 'avgsol' to
your original FROM clause:

SELECT CASE WHEN w.station_id = site_near.station_id THEN
w.obs_id ELSE
s.obs_id END AS obs_id,  site_near.station_id, site_near.longname,
w.year, w.doy, w.precip, w.tmin, w.tmax,
--replace missing values (-999) with the monthly average
CASE s.par WHEN -999 THEN avgsol.par ELSE s.par END


FROM site_near
  INNER JOIN solar s ON
    (site_near.ref_solar_station_id = s.station_id
     AND site_near.obs_year = s.year)
  INNER JOIN weather w ON
    (site_near.ref_weather_station_id = w.station_id
     AND site_near.obs_year = w.year
     AND s.date = w.date)
  INNER JOIN (SELECT month, AVG(par) FROM solar GROUP BY month) AS
avgsol ON
    (s.month = avgsol.month)
WHERE ...

Still no claim for correctness.

Does it make more sense now?

Thanks again Laurenz. Hopefully I have nearly figured this out. I have a question that indicates to me that I am a little fuzzy on one more point.

In the line: "CASE s.par WHEN -999 THEN avgsol.par ELSE s.par END"

I am getting an error that says, "column avgsol.par does not exist". I understand that you are creating avgsol as a subselect, but I also see the point of the error message that the column .par does not exist. If I change avgsol.par to the simple form avgsol (to match the subselect " INNER JOIN (SELECT month, AVG(par) FROM solar GROUP BY month) AS avgsol ON (s.month = avgsol.month)". Then I get an error about CASE types real and record cannot be matched. Any final ideas?

The "AVG(par)" should've been aliased. "AVG(par) as par" would work. As is, the column name returned is just "avg".

erik jones <[EMAIL PROTECTED]>
software developer
615-296-0838
emma(r)




---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to