Ayuda en Obtener una Columna Acumulativa en SQL

19/12/2005 - 15:14 por Developers | Informe spam
Amigos tengo esta consulta:

Select codigo, detalle, importe, porcentaje From MiTabla where tipo='01'
order by porcentaje

Retornando estos valores Ordernados x Porcentaje :
Codigo Detalle Importe Porcentaje
11111 xxxxxx 100.00 5.5
88888 yyyyyy 55.50 4.8
33333 aaaaaa 55.00 4.8
99999 wweew 40.00 4.0

a Este resultado necesito agregar una columna que acumule el porcentaje es
decir tener este resultado.

Codigo Detalle Importe Porcentaje Porcentaje_Acumulado
11111 xxxxxx 100.00 5.5 5.5
88888 yyyyyy 55.50 4.8 10.3
33333 aaaaaa 55.00 4.8 15.1
99999 wweew 40.00 4.0 19.1

La Columna Pocentaje Acumulado nace de

Fila 1 0.0 + 5.5 = 5.5 -- Debido a que la primera fila no tiene
antecesora
Fila 2 5.5 + 4.8 = 10.3 -- Porcentaje Acumulado Fila 1 + Porcentaje de
Fila 2
Fila 3 10.3 + 4.8 = 15.1 -- Porcentaje Acumulado Fila 2 + Porcentaje de
Fila 3
Fila 4 15.1 + 4.0 = 19.1 -- Porcentaje Acumulado Fila 3 + Porcentaje de
Fila 4

Ahora si se fijan el el Primer Resultado viene Ordenado x Porcentaje y de
acuerdo a ese orden tengo que acumular la columna.

Se que me ultima Posibilidad es usar cursores, pero antes de usarlo lance
este consulta para ver si me podian ayudar.

Gracias

Developers - Dany Acosta

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
19/12/2005 - 17:27 | Informe spam
Developers,

Aunque el resultado que posteastes no esta de acuerdo a la sentencia
"select" que usas (lo digo porque la sentencia usa ORDER BY [Porcentaje] y el
resultado esta ordenado por [Porcentaje] pero de manera descendente), tratare
de dar una posible solucion.

A simple vista podemos decir cual fila (de las que tienen porcentaje igual a
4.8) esta primero que la otra, pero estto debemos comunicarselo a sql server
de una forma programatica para lo cual debemos usar alguna otra columna que
identifique unicamente cada fila. De todas las columnas posteadas cual
podemos usar para poder identificar unicamente cada fila.?


AMB


"Developers" wrote:

Amigos tengo esta consulta:

Select codigo, detalle, importe, porcentaje From MiTabla where tipo='01'
order by porcentaje

Retornando estos valores Ordernados x Porcentaje :
Codigo Detalle Importe Porcentaje
11111 xxxxxx 100.00 5.5
88888 yyyyyy 55.50 4.8
33333 aaaaaa 55.00 4.8
99999 wweew 40.00 4.0

a Este resultado necesito agregar una columna que acumule el porcentaje es
decir tener este resultado.

Codigo Detalle Importe Porcentaje Porcentaje_Acumulado
11111 xxxxxx 100.00 5.5 5.5
88888 yyyyyy 55.50 4.8 10.3
33333 aaaaaa 55.00 4.8 15.1
99999 wweew 40.00 4.0 19.1

La Columna Pocentaje Acumulado nace de

Fila 1 0.0 + 5.5 = 5.5 -- Debido a que la primera fila no tiene
antecesora
Fila 2 5.5 + 4.8 = 10.3 -- Porcentaje Acumulado Fila 1 + Porcentaje de
Fila 2
Fila 3 10.3 + 4.8 = 15.1 -- Porcentaje Acumulado Fila 2 + Porcentaje de
Fila 3
Fila 4 15.1 + 4.0 = 19.1 -- Porcentaje Acumulado Fila 3 + Porcentaje de
Fila 4

Ahora si se fijan el el Primer Resultado viene Ordenado x Porcentaje y de
acuerdo a ese orden tengo que acumular la columna.

Se que me ultima Posibilidad es usar cursores, pero antes de usarlo lance
este consulta para ver si me podian ayudar.

Gracias

Developers - Dany Acosta



Respuesta Responder a este mensaje
#2 Developers
19/12/2005 - 17:39 | Informe spam
Tienes razon, me falto esta agregar esto a la sentencia

Select codigo, detalle, importe, porcentaje From MiTabla where tipo='01'
order by porcentaje desc

Bueno el que me dice que es la unica fila dentro del conjunto de resultados
es la Columna Codigo ya que es unica que no repite, los demas valores que
sigo revisando hasta el momento. en algunos casos se repiten (Solo
numericos)

Gracias


"Alejandro Mesa" escribió en el
mensaje news:
Developers,

Aunque el resultado que posteastes no esta de acuerdo a la sentencia
"select" que usas (lo digo porque la sentencia usa ORDER BY [Porcentaje] y


el
resultado esta ordenado por [Porcentaje] pero de manera descendente),


tratare
de dar una posible solucion.

A simple vista podemos decir cual fila (de las que tienen porcentaje igual


a
4.8) esta primero que la otra, pero estto debemos comunicarselo a sql


server
de una forma programatica para lo cual debemos usar alguna otra columna


que
identifique unicamente cada fila. De todas las columnas posteadas cual
podemos usar para poder identificar unicamente cada fila.?


AMB


"Developers" wrote:

> Amigos tengo esta consulta:
>
> Select codigo, detalle, importe, porcentaje From MiTabla where tipo='01'
> order by porcentaje
>
> Retornando estos valores Ordernados x Porcentaje :
> Codigo Detalle Importe Porcentaje
> 11111 xxxxxx 100.00 5.5
> 88888 yyyyyy 55.50 4.8
> 33333 aaaaaa 55.00 4.8
> 99999 wweew 40.00 4.0
>
> a Este resultado necesito agregar una columna que acumule el porcentaje


es
> decir tener este resultado.
>
> Codigo Detalle Importe Porcentaje Porcentaje_Acumulado
> 11111 xxxxxx 100.00 5.5 5.5
> 88888 yyyyyy 55.50 4.8 10.3
> 33333 aaaaaa 55.00 4.8 15.1
> 99999 wweew 40.00 4.0 19.1
>
> La Columna Pocentaje Acumulado nace de
>
> Fila 1 0.0 + 5.5 = 5.5 -- Debido a que la primera fila no tiene
> antecesora
> Fila 2 5.5 + 4.8 = 10.3 -- Porcentaje Acumulado Fila 1 + Porcentaje


de
> Fila 2
> Fila 3 10.3 + 4.8 = 15.1 -- Porcentaje Acumulado Fila 2 + Porcentaje


de
> Fila 3
> Fila 4 15.1 + 4.0 = 19.1 -- Porcentaje Acumulado Fila 3 + Porcentaje


de
> Fila 4
>
> Ahora si se fijan el el Primer Resultado viene Ordenado x Porcentaje y


de
> acuerdo a ese orden tengo que acumular la columna.
>
> Se que me ultima Posibilidad es usar cursores, pero antes de usarlo


lance
> este consulta para ver si me podian ayudar.
>
> Gracias
>
> Developers - Dany Acosta
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
19/12/2005 - 20:28 | Informe spam
Developers,

Entonces usemos la columna [codigo] para diferenciar filas con igual
[porcentaje].

use northwind
go

create table t1 (
Codigo varchar(15) not null unique,
Detalle varchar(25),
Importe money,
Porcentaje decimal (5, 2)
)
go

insert into t1 values('11111', 'xxxxxx', 100.00, 5.5)
insert into t1 values('88888', 'yyyyyy', 55.50, 4.8)
insert into t1 values('33333', 'aaaaaa', 55.00, 4.8)
insert into t1 values('99999', 'wweew', 40.00, 4.0)
go

select
a.codigo, a.detalle, a.importe, a.porcentaje,
sum(b.porcentaje) as porcentaje_acumulado
from
t1 as a
left join
t1 as b
on a.porcentaje < b.porcentaje
or (a.porcentaje = b.porcentaje and a.codigo >= b.codigo)
group by
a.codigo, a.detalle, a.importe, a.porcentaje
order by
a.porcentaje desc, a.codigo
go

drop table t1
go


AMB


"Developers" wrote:

Tienes razon, me falto esta agregar esto a la sentencia

Select codigo, detalle, importe, porcentaje From MiTabla where tipo='01'
order by porcentaje desc

Bueno el que me dice que es la unica fila dentro del conjunto de resultados
es la Columna Codigo ya que es unica que no repite, los demas valores que
sigo revisando hasta el momento. en algunos casos se repiten (Solo
numericos)

Gracias


"Alejandro Mesa" escribió en el
mensaje news:
> Developers,
>
> Aunque el resultado que posteastes no esta de acuerdo a la sentencia
> "select" que usas (lo digo porque la sentencia usa ORDER BY [Porcentaje] y
el
> resultado esta ordenado por [Porcentaje] pero de manera descendente),
tratare
> de dar una posible solucion.
>
> A simple vista podemos decir cual fila (de las que tienen porcentaje igual
a
> 4.8) esta primero que la otra, pero estto debemos comunicarselo a sql
server
> de una forma programatica para lo cual debemos usar alguna otra columna
que
> identifique unicamente cada fila. De todas las columnas posteadas cual
> podemos usar para poder identificar unicamente cada fila.?
>
>
> AMB
>
>
> "Developers" wrote:
>
> > Amigos tengo esta consulta:
> >
> > Select codigo, detalle, importe, porcentaje From MiTabla where tipo='01'
> > order by porcentaje
> >
> > Retornando estos valores Ordernados x Porcentaje :
> > Codigo Detalle Importe Porcentaje
> > 11111 xxxxxx 100.00 5.5
> > 88888 yyyyyy 55.50 4.8
> > 33333 aaaaaa 55.00 4.8
> > 99999 wweew 40.00 4.0
> >
> > a Este resultado necesito agregar una columna que acumule el porcentaje
es
> > decir tener este resultado.
> >
> > Codigo Detalle Importe Porcentaje Porcentaje_Acumulado
> > 11111 xxxxxx 100.00 5.5 5.5
> > 88888 yyyyyy 55.50 4.8 10.3
> > 33333 aaaaaa 55.00 4.8 15.1
> > 99999 wweew 40.00 4.0 19.1
> >
> > La Columna Pocentaje Acumulado nace de
> >
> > Fila 1 0.0 + 5.5 = 5.5 -- Debido a que la primera fila no tiene
> > antecesora
> > Fila 2 5.5 + 4.8 = 10.3 -- Porcentaje Acumulado Fila 1 + Porcentaje
de
> > Fila 2
> > Fila 3 10.3 + 4.8 = 15.1 -- Porcentaje Acumulado Fila 2 + Porcentaje
de
> > Fila 3
> > Fila 4 15.1 + 4.0 = 19.1 -- Porcentaje Acumulado Fila 3 + Porcentaje
de
> > Fila 4
> >
> > Ahora si se fijan el el Primer Resultado viene Ordenado x Porcentaje y
de
> > acuerdo a ese orden tengo que acumular la columna.
> >
> > Se que me ultima Posibilidad es usar cursores, pero antes de usarlo
lance
> > este consulta para ver si me podian ayudar.
> >
> > Gracias
> >
> > Developers - Dany Acosta
> >
> >
> >



Respuesta Responder a este mensaje
#4 Developers
19/12/2005 - 22:30 | Informe spam
Gracias Alejandro x ejemplo Sabia que no se podia usar Cursores en
estos casos...

"Alejandro Mesa" escribió en el
mensaje news:
Developers,

Entonces usemos la columna [codigo] para diferenciar filas con igual
[porcentaje].

use northwind
go

create table t1 (
Codigo varchar(15) not null unique,
Detalle varchar(25),
Importe money,
Porcentaje decimal (5, 2)
)
go

insert into t1 values('11111', 'xxxxxx', 100.00, 5.5)
insert into t1 values('88888', 'yyyyyy', 55.50, 4.8)
insert into t1 values('33333', 'aaaaaa', 55.00, 4.8)
insert into t1 values('99999', 'wweew', 40.00, 4.0)
go

select
a.codigo, a.detalle, a.importe, a.porcentaje,
sum(b.porcentaje) as porcentaje_acumulado
from
t1 as a
left join
t1 as b
on a.porcentaje < b.porcentaje
or (a.porcentaje = b.porcentaje and a.codigo >= b.codigo)
group by
a.codigo, a.detalle, a.importe, a.porcentaje
order by
a.porcentaje desc, a.codigo
go

drop table t1
go


AMB


"Developers" wrote:

> Tienes razon, me falto esta agregar esto a la sentencia
>
> Select codigo, detalle, importe, porcentaje From MiTabla where tipo='01'
> order by porcentaje desc
>
> Bueno el que me dice que es la unica fila dentro del conjunto de


resultados
> es la Columna Codigo ya que es unica que no repite, los demas valores


que
> sigo revisando hasta el momento. en algunos casos se repiten (Solo
> numericos)
>
> Gracias
>
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Developers,
> >
> > Aunque el resultado que posteastes no esta de acuerdo a la sentencia
> > "select" que usas (lo digo porque la sentencia usa ORDER BY


[Porcentaje] y
> el
> > resultado esta ordenado por [Porcentaje] pero de manera descendente),
> tratare
> > de dar una posible solucion.
> >
> > A simple vista podemos decir cual fila (de las que tienen porcentaje


igual
> a
> > 4.8) esta primero que la otra, pero estto debemos comunicarselo a sql
> server
> > de una forma programatica para lo cual debemos usar alguna otra


columna
> que
> > identifique unicamente cada fila. De todas las columnas posteadas cual
> > podemos usar para poder identificar unicamente cada fila.?
> >
> >
> > AMB
> >
> >
> > "Developers" wrote:
> >
> > > Amigos tengo esta consulta:
> > >
> > > Select codigo, detalle, importe, porcentaje From MiTabla where


tipo='01'
> > > order by porcentaje
> > >
> > > Retornando estos valores Ordernados x Porcentaje :
> > > Codigo Detalle Importe Porcentaje
> > > 11111 xxxxxx 100.00 5.5
> > > 88888 yyyyyy 55.50 4.8
> > > 33333 aaaaaa 55.00 4.8
> > > 99999 wweew 40.00 4.0
> > >
> > > a Este resultado necesito agregar una columna que acumule el


porcentaje
> es
> > > decir tener este resultado.
> > >
> > > Codigo Detalle Importe Porcentaje Porcentaje_Acumulado
> > > 11111 xxxxxx 100.00 5.5 5.5
> > > 88888 yyyyyy 55.50 4.8 10.3
> > > 33333 aaaaaa 55.00 4.8 15.1
> > > 99999 wweew 40.00 4.0 19.1
> > >
> > > La Columna Pocentaje Acumulado nace de
> > >
> > > Fila 1 0.0 + 5.5 = 5.5 -- Debido a que la primera fila no


tiene
> > > antecesora
> > > Fila 2 5.5 + 4.8 = 10.3 -- Porcentaje Acumulado Fila 1 +


Porcentaje
> de
> > > Fila 2
> > > Fila 3 10.3 + 4.8 = 15.1 -- Porcentaje Acumulado Fila 2 +


Porcentaje
> de
> > > Fila 3
> > > Fila 4 15.1 + 4.0 = 19.1 -- Porcentaje Acumulado Fila 3 +


Porcentaje
> de
> > > Fila 4
> > >
> > > Ahora si se fijan el el Primer Resultado viene Ordenado x Porcentaje


y
> de
> > > acuerdo a ese orden tengo que acumular la columna.
> > >
> > > Se que me ultima Posibilidad es usar cursores, pero antes de usarlo
> lance
> > > este consulta para ver si me podian ayudar.
> > >
> > > Gracias
> > >
> > > Developers - Dany Acosta
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida