OK Simon...
Here is the SQL statement:
SELECT left(ExportData.dbo.tblWeeklySales.wsrCusNum,5) AS AccountNo,
ExportData.dbo.tblWeeklySales.wsrCusName as Client ,
SUM ( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2002
THEN ExportData.dbo.tblWeeklySales.wsrSales ELSE 0 END) AS Turnover2002,
SUM ( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2003
THEN ExportData.dbo.tblWeeklySales.wsrSales ELSE 0 END ) AS Turnover2003,
SUM (CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2002
THEN CONVERT(decimal(9,2),(ExportData.dbo.tblWeeklySales.wsrSales) - (ExportData.dbo.tblWeeklySales.wsrProfit), 2)ELSE 0 END) AS Cost2002,
SUM (CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2003 THEN CONVERT(decimal(9,2),(ExportData.dbo.tblWeeklySales.wsrSales) - (ExportData.dbo.tblWeeklySales.wsrProfit), 2)ELSE 0 END) AS Cost2003,
SUM ( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2002 then ExportData.dbo.tblWeeklySales.wsrProfit ELSE 0 END) AS Profit2002, SUM ( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2003
then ExportData.dbo.tblWeeklySales.wsrProfit ELSE 0 END) AS Profit2003, CONVERT( decimal(9,2),
CASE WHEN SUM( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2002
then ExportData.dbo.tblWeeklySales.wsrSales ELSE 0 END ) != 0
THEN SUM( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2002
then ExportData.dbo.tblWeeklySales.wsrProfit ELSE 0 END ) * 100 / SUM( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2002
then ExportData.dbo.tblWeeklySales.wsrSales ELSE 0 END ) ELSE 0 END , 2 ) AS MargPer2002, CONVERT( decimal(9,2),
CASE WHEN SUM( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2003
then ExportData.dbo.tblWeeklySales.wsrSales ELSE 0 END ) != 0
THEN SUM( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2003
then ExportData.dbo.tblWeeklySales.wsrProfit ELSE 0 END ) * 100 / SUM( CASE WHEN DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) = 2003 then ExportData.dbo.tblWeeklySales.wsrSales ELSE 0 END ) ELSE 0 END , 2 ) AS MargPer2003
FROM UserID2.dbo.tblRegion
INNER JOIN UserID2.dbo.tblArea
ON UserID2.dbo.tblRegion.regRegionID = UserID2.dbo.tblArea.areRegionID
INNER JOIN UserID2.dbo.tblBranch
ON UserID2.dbo.tblArea.areAreaID = UserID2.dbo.tblBranch.brnAreaID INNER JOIN ExportData.dbo.tblWeeklySales
ON RIGHT(USERID2.dbo.tblBranch.brnBranchNumber, 3) = RIGHT(ExportData.dbo.tblWeeklySales.wsrCusBrn, 3)
WHERE (DatePart(m,ExportData.dbo.tblWeeklySales.wsrWERun) >= 1 AND DatePart(m,ExportData.dbo.tblWeeklySales.wsrWERun) <= 1)AND (DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) < = 2003)AND (DATEPART(yy,ExportData.dbo.tblWeeklySales.wsrWERun) > = 2002)GROUP BY left(ExportData.dbo.tblWeeklySales.wsrCusNum,5), ExportData.dbo.tblWeeklySales.wsrCusName ORDER BY left(ExportData.dbo.tblWeeklySales.wsrCusNum,5) asc
This statement returns 4936 reords and is parameter driven.
If I select less records, it runs fine. It takes 10 secs to run in the Query Analyser.
regards
J