unbounded row_number preceding over lead functions sql sql-server tsql sql-server-2012 window-functions

sql - row_number - sum over



Seleccione el caso con "sobre la particiĆ³n por" (2)

¿Cuál es la sintaxis correcta o es posible usar mayúsculas / minúsculas en una partición de selección y en ella? (usando el servidor sql 2012)

a = unique id b = a string''xf%'' c = values d = values e = values select case when b like ''xf%'' then (sum(c*e)/100*3423 over (partition by a))end as sumProduct from #myTable

esto es algo que tengo que resolver, que es parte de un problema que tuve anteriormente SumProduct en sql

editar : previa solicitud, agregar algunos datos de muestra y el resultado esperado crear la tabla #testing (b varchar (20), una fecha, c int, e int)

b a c e sumProduct (expected) xf1m 2015.03.02 1 3 (1*3 + 2*5 + 4*2 +3*6)*100/3423 xf3m 2015.03.02 2 5 (1*3 + 2*5 + 4*2 +3*6)/100*3423 xf5y 2015.03.02 4 2 (1*3 + 2*5 + 4*2 +3*6)/100*3423 xf10y 2015.03.02 3 6 (1*3 + 2*5 + 4*2 +3*6)/100*3423 adfe 2015.03.02 2 5 ---this is skipped because is not xf% xf1m 2013.02.01 7 2 (7*2 + 1*8 + 10*1)/100*3423 xf15y 2013.02.01 1 8 (7*2 + 1*8 + 10*1)/100*3423 xf20y 2013.02.01 10 1 (7*2 + 1*8 + 10*1)/100*3423

Vi que el problema es este: se están sumando cosas incluso si no corresponden a los criterios. En mi violín, puedes ver que el resultado de sumProduct es 49 en lugar de 39 porque se están agregando 2 * 5 de Adfe. ¿Qué puedo hacer al respecto?

create table #testing (b varchar (20), a date, c int, e int) insert into #testing (b,a,c,e) values (''xf1m'',''2015-03-02'',''1'',''3''), (''xf3m'',''2015-03-02'',''2'',''5''), (''xf5y'',''2015-03-02'',''4'',''2''), (''xf10y'',''2015-03-02'',''3'',''6''), (''adfe'',''2015-03-02'',''2'',''5''), (''xf1m'',''2013-02-01'',''7'',''2''), (''xf15y'',''2013-02-01'',''1'',''8''), (''xf20y'',''2013-02-01'',''10'',''1'')

editar: encontró la solución, la escribió como respuesta a continuación


Encontré la solución para lo que estaba pidiendo en mi edición:

select b, a, c, e, case when b like ''xf%'' then -- (sum(c * e) over (partition by a ))/*/3*10*/ end as sumProduct into #testing2 from #testing where (b like ''xf%'') select t1.b, t1.a,t1.c,t1.e,t2.sumProduct from #testing t1 left join #testing2 t2 on t1.a = t2.a and t2.b = t1.b order by t1.a, t1.b


No puede poner expresiones arbitrarias dentro de la expresión Aggregate() OVER (PARTITION clause) , así que mueva los cálculos adicionales al exterior:

select case when b like ''xf%'' then (sum(c*e) over (partition by a))/100*3423 end as sumProduct from #myTable