news <[EMAIL PROTECTED]> wrote on 10/26/2005 09:46:49 AM: > I am unsure how to write this query, can someone help? > > I have two tables. > > One has a list of retailers (tbl_retailer): > > retailerid > name > postcode > > e.g. > > 1 Sprocket Supplies CH23 4PY > > The other has the sales by month for each retailer: > > retailerid > month_2 > sales > > e.g. > > 1 2004-01 100 > 1 2004-02 400 > 1 2004-03 300 > 1 2004-04 200 > 1 2004-05 300 > > > What I need is a way to output a list of each retailer with two columns > at the end being sales this year to date and the equivalent sales for > the previous year. > > So the columns would be: > > name this_years_sales_to_date last_years_sales_to_date > > Total sales for ever would be a simple GROUP BY query with a sum on the > sales - but I cant see how I am going to get this info. Do I need to use
> nested queries? > > Regards, > > Dan. > > Try this. It's a variation on the pivot table technique. We are column-izing on a the year value derived from the string pattern of your month_2 column: SELECT r.name , sum(if(sbm.month_2 between '2004' and '2004-99',sbm.sales, 0)) as sales_2004 , sum(if(sbm.month_2 between '2005' and '2005-99',sbm.sales, 0)) as sales_2005 FROM retailers r LEFT JOIN sales_by_month sbm on sbm.retailerid = r.retailerid GROUP BY r.name; That should give you the yearly sales figures for every retailier in your system for cy2004 and cy2005 (cy = calendar year) Shawn Green Database Administrator Unimin Corporation - Spruce Pine