|
ValterBorges
Master Smack Fu Yak Hacker
1429 Posts |
Posted - 2002-11-20 : 17:11:49
|
| If you want to filter on date add to your where clauseand date = @YourDateVariableIf you want to group by date add a group by clauseIt sounds to me that you want to group by dateSo here goes:SELECT A.cdepto,A.estado,A.dateonly,CASE SECONDADD WHEN 0 THEN 0 ELSE CAST(FIRSTADD AS REAL)/CAST(SECONDADD AS REAL) END As PercentageX FROM ( SELECT cdepto, estado,DATEADD(d, DATEDIFF(d, 0, [datefield]), 0) As dateonly, SUM(toneladas) As FIRSTADD FROM Produccion WHERE cdepto = '008' AND estado='p' GROUP BY cdepto, estado, DATEADD(d, DATEDIFF(d, 0, [datefield]), 0)) As A INNER JOIN ( SELECT cdepto, DATEADD(d, DATEDIFF(d, 0, [datefield]), 0) As dateonly, SUM(toneladas) As SECONDADD FROM Produccion WHERE cdepto='008' GROUP BY cdepto, DATEADD(d, DATEDIFF(d, 0, [datefield]), 0) ) As B ON A.cdepto = B.cdepto AND A.dateonly = B.dateonlyMethod2:SELECTAA.cdepto,AA.estado,AA.dateonly,CASE AA.SECONDADDWHEN 0 THEN 0.00ELSECAST(AA.FIRSTADD AS REAL) / CAST(AA.SECONDADD AS REAL)ENDFROM(SELECT B.cdepto, B.estado,DATEADD(d, DATEDIFF(d, 0, B.[datefield]), 0) As dateonly,SUM(B.TONELADAS)AS FIRSTADD,(SELECT SUM(A.TONELADAS) FROM Produccion A WHERE A.cdepto = B.cdepto AND DATEADD(d, DATEDIFF(d, 0, A.[datefield]), 0) = DATEADD(d, DATEDIFF(d, 0, B.[datefield]), 0)) AS SECONDADDFROM Produccion BWHERE B.cdepto = '08' AND B.estado='p'GROUP BY B.cdepto, B.estado, DATEADD(d, DATEDIFF(d, 0, B.[datefield]), 0)) AS AAI'm sure someone might be able to simply this to one query.The second method will perform better than first and even better if you have a clustered index on cdepto, estado, datefieldEdited by - ValterBorges on 11/20/2002 19:27:56 |
 |
|