¿Es posible hacer esto en una vista?

31/03/2007 - 01:18 por Daymar | Informe spam
Hola a todos,

espero que me puedan ayudar. Les planteo mi escenario:

Tengo una base de datos en SQLServer con varias tablas, una de las tablas
(Pedidos) contiene los pedidos realizados por los clientes. Lo que necesito
hacer es una vista que saque un listado de los clientes que acumulan el 60%
de la cantidad pedida total (un cliente pide x Kgs), los clientes que
acumulan el 30% y el listado de los que acumulan el 10% del total.

Mi idea es obtener la suma total del Kgs pedidos y después hacer un select
con un campo añadido, por ejemplo, "grupo" donde indicare si forma parte del
grupo del 60%, del 30% o del 10%.

Luego con el crystal reports haré un report que me agrupara los clientes por
el campo añadido "grupo".

No se como hacerlo de esta forma, o a lo mejor existe una forma mejor de
hacerlo.

Toda ayuda sera de agradecer. Muchas gracias por todo.

Preguntas similare

Leer las respuestas

#6 Daymar
02/04/2007 - 12:00 | Informe spam
De momento no lo he conseguido. Lo sigo intentando.


Muchas gracias por tu ayuda.

"Daymar" wrote:

Muchas gracias por tu colaboracion, en cuanto llegue lo pruebo.

Saludos.

"Alejandro Mesa" wrote:

> Daymar,
>
> Ve si esto te es de ayuda.
>
> ;with cte_1 -- calcular suyma de las cantidades pedidas por cada cliente
> as
> (
> select
> clienteid,
> sum(cantidad_pedida) as sum_cantidad_pedida
> from
> dbo.t1
> ),
> cte_2 -- asignar un numero consecutivo de acuerdo a la suma de cantidades
> pedidas y clienteid en caso de haber empate
> (
> select
> clienteid,
> sum_cantidad_pedida,
> row_number() over(order by sum_cantidad_pedida DESC, clienteid) as rn
> from cte_1
> ),
> cte_3 -- calcular el porciento de completamiento por cada fila
> (
> select
> clienteid,
> sum_cantidad_pedida,
> ((select sum(b.sum_cantidad_pedida) from cte_2 as b where b.rn <= a.rn) *
> 100.00) / sum(sum_cantidad_pedida) over() as running_percent
> from
> cte_2 as a
> )
> select
> clienteid,
> sum_cantidad_pedida,
> case when running_percent <= 60.00 then 1 else case when running_percent
> <= 90 then 2 else 3 end end as grupo
> from
> cte_3
> order by
> sum_cantidad_pedida,
> clienteid,
> grupo
> go
>
>
> AMB
>
>
> "Daymar" wrote in message
> news:
> > Se suman las cantidas pedidas de cada cliente, se ordena de mayor a menor
> > y
> > luego se tendria que coger de alguna forma los clientes que forman el 60%
> > del
> > pedido total, luego los que forman el 30% y por terminar los clientes que
> > forman el 10% que queda.
> >
> > No se si me he explicado bien.
> >
> > Muchas gracias.
> >
> > "Alejandro Mesa" wrote:
> >
> >> Daymar,
> >>
> >> Pudieras explicarno cual es el criterio a seguir para saber si la cntidad
> >> "x" que el cliente pidio forma parte de un grupo determinado?
> >>
> >>
> >> AMB
> >>
> >>
> >> "Daymar" wrote in message
> >> news:
> >> > Hola a todos,
> >> >
> >> > espero que me puedan ayudar. Les planteo mi escenario:
> >> >
> >> > Tengo una base de datos en SQLServer con varias tablas, una de las
> >> > tablas
> >> > (Pedidos) contiene los pedidos realizados por los clientes. Lo que
> >> > necesito
> >> > hacer es una vista que saque un listado de los clientes que acumulan el
> >> > 60%
> >> > de la cantidad pedida total (un cliente pide x Kgs), los clientes que
> >> > acumulan el 30% y el listado de los que acumulan el 10% del total.
> >> >
> >> > Mi idea es obtener la suma total del Kgs pedidos y después hacer un
> >> > select
> >> > con un campo añadido, por ejemplo, "grupo" donde indicare si forma
> >> > parte
> >> > del
> >> > grupo del 60%, del 30% o del 10%.
> >> >
> >> > Luego con el crystal reports haré un report que me agrupara los
> >> > clientes
> >> > por
> >> > el campo añadido "grupo".
> >> >
> >> > No se como hacerlo de esta forma, o a lo mejor existe una forma mejor
> >> > de
> >> > hacerlo.
> >> >
> >> > Toda ayuda sera de agradecer. Muchas gracias por todo.
> >> >
> >>
> >>
> >>
>
>
>
Respuesta Responder a este mensaje
#7 Alejandro Mesa
03/04/2007 - 01:53 | Informe spam
Daymar,

Para este tipo de problemas, es mejor que postees la estructura de las
tablas involucradas, incluyendo restricciones e indices, asi como data de
ejemplo (sentencias insert) y resultados esperados.


AMB

"Daymar" wrote in message
news:
De momento no lo he conseguido. Lo sigo intentando.


Muchas gracias por tu ayuda.

"Daymar" wrote:

Muchas gracias por tu colaboracion, en cuanto llegue lo pruebo.

Saludos.

"Alejandro Mesa" wrote:

> Daymar,
>
> Ve si esto te es de ayuda.
>
> ;with cte_1 -- calcular suyma de las cantidades pedidas por cada
> cliente
> as
> (
> select
> clienteid,
> sum(cantidad_pedida) as sum_cantidad_pedida
> from
> dbo.t1
> ),
> cte_2 -- asignar un numero consecutivo de acuerdo a la suma de
> cantidades
> pedidas y clienteid en caso de haber empate
> (
> select
> clienteid,
> sum_cantidad_pedida,
> row_number() over(order by sum_cantidad_pedida DESC, clienteid) as
> rn
> from cte_1
> ),
> cte_3 -- calcular el porciento de completamiento por cada fila
> (
> select
> clienteid,
> sum_cantidad_pedida,
> ((select sum(b.sum_cantidad_pedida) from cte_2 as b where b.rn <=
> a.rn) *
> 100.00) / sum(sum_cantidad_pedida) over() as running_percent
> from
> cte_2 as a
> )
> select
> clienteid,
> sum_cantidad_pedida,
> case when running_percent <= 60.00 then 1 else case when
> running_percent
> <= 90 then 2 else 3 end end as grupo
> from
> cte_3
> order by
> sum_cantidad_pedida,
> clienteid,
> grupo
> go
>
>
> AMB
>
>
> "Daymar" wrote in message
> news:
> > Se suman las cantidas pedidas de cada cliente, se ordena de mayor a
> > menor
> > y
> > luego se tendria que coger de alguna forma los clientes que forman el
> > 60%
> > del
> > pedido total, luego los que forman el 30% y por terminar los clientes
> > que
> > forman el 10% que queda.
> >
> > No se si me he explicado bien.
> >
> > Muchas gracias.
> >
> > "Alejandro Mesa" wrote:
> >
> >> Daymar,
> >>
> >> Pudieras explicarno cual es el criterio a seguir para saber si la
> >> cntidad
> >> "x" que el cliente pidio forma parte de un grupo determinado?
> >>
> >>
> >> AMB
> >>
> >>
> >> "Daymar" wrote in message
> >> news:
> >> > Hola a todos,
> >> >
> >> > espero que me puedan ayudar. Les planteo mi escenario:
> >> >
> >> > Tengo una base de datos en SQLServer con varias tablas, una de las
> >> > tablas
> >> > (Pedidos) contiene los pedidos realizados por los clientes. Lo que
> >> > necesito
> >> > hacer es una vista que saque un listado de los clientes que
> >> > acumulan el
> >> > 60%
> >> > de la cantidad pedida total (un cliente pide x Kgs), los clientes
> >> > que
> >> > acumulan el 30% y el listado de los que acumulan el 10% del total.
> >> >
> >> > Mi idea es obtener la suma total del Kgs pedidos y después hacer
> >> > un
> >> > select
> >> > con un campo añadido, por ejemplo, "grupo" donde indicare si forma
> >> > parte
> >> > del
> >> > grupo del 60%, del 30% o del 10%.
> >> >
> >> > Luego con el crystal reports haré un report que me agrupara los
> >> > clientes
> >> > por
> >> > el campo añadido "grupo".
> >> >
> >> > No se como hacerlo de esta forma, o a lo mejor existe una forma
> >> > mejor
> >> > de
> >> > hacerlo.
> >> >
> >> > Toda ayuda sera de agradecer. Muchas gracias por todo.
> >> >
> >>
> >>
> >>
>
>
>
Respuesta Responder a este mensaje
#8 Alejandro Mesa
03/04/2007 - 02:45 | Informe spam
Corrección,

;with cte_1 -- calcular suyma de las cantidades pedidas por cada cliente
as
(
select
clienteid,
sum(cantidad_pedida) as sum_cantidad_pedida
from
dbo.t1
group by
clienteid
),
cte_2 -- asignar un numero consecutivo de acuerdo a la suma de cantidades
pedidas y clienteid en caso de haber empate
(
select
clienteid,
sum_cantidad_pedida,
row_number() over(order by sum_cantidad_pedida DESC, clienteid) as rn
from cte_1
),
cte_3 -- calcular el porciento de completamiento por cada fila
(
select
clienteid,
sum_cantidad_pedida,
((select sum(b.sum_cantidad_pedida) from cte_2 as b where b.rn <= a.rn) *
100.00) / sum(sum_cantidad_pedida) over() as running_percent
from
cte_2 as a
)
select
clienteid,
sum_cantidad_pedida,
case when running_percent <= 60.00 then 1 else case when running_percent
<= 90 then 2 else 3 end end as grupo
from
cte_3
order by
sum_cantidad_pedida,
clienteid,
grupo
go


AMB

"Alejandro Mesa" wrote in message
news:ubqJvy$
Daymar,

Ve si esto te es de ayuda.

;with cte_1 -- calcular suyma de las cantidades pedidas por cada cliente
as
(
select
clienteid,
sum(cantidad_pedida) as sum_cantidad_pedida
from
dbo.t1
),
cte_2 -- asignar un numero consecutivo de acuerdo a la suma de cantidades
pedidas y clienteid en caso de haber empate
(
select
clienteid,
sum_cantidad_pedida,
row_number() over(order by sum_cantidad_pedida DESC, clienteid) as rn
from cte_1
),
cte_3 -- calcular el porciento de completamiento por cada fila
(
select
clienteid,
sum_cantidad_pedida,
((select sum(b.sum_cantidad_pedida) from cte_2 as b where b.rn <= a.rn)
* 100.00) / sum(sum_cantidad_pedida) over() as running_percent
from
cte_2 as a
)
select
clienteid,
sum_cantidad_pedida,
case when running_percent <= 60.00 then 1 else case when running_percent
<= 90 then 2 else 3 end end as grupo
from
cte_3
order by
sum_cantidad_pedida,
clienteid,
grupo
go


AMB


"Daymar" wrote in message
news:
Se suman las cantidas pedidas de cada cliente, se ordena de mayor a menor
y
luego se tendria que coger de alguna forma los clientes que forman el 60%
del
pedido total, luego los que forman el 30% y por terminar los clientes que
forman el 10% que queda.

No se si me he explicado bien.

Muchas gracias.

"Alejandro Mesa" wrote:

Daymar,

Pudieras explicarno cual es el criterio a seguir para saber si la
cntidad
"x" que el cliente pidio forma parte de un grupo determinado?


AMB


"Daymar" wrote in message
news:
> Hola a todos,
>
> espero que me puedan ayudar. Les planteo mi escenario:
>
> Tengo una base de datos en SQLServer con varias tablas, una de las
> tablas
> (Pedidos) contiene los pedidos realizados por los clientes. Lo que
> necesito
> hacer es una vista que saque un listado de los clientes que acumulan
> el
> 60%
> de la cantidad pedida total (un cliente pide x Kgs), los clientes que
> acumulan el 30% y el listado de los que acumulan el 10% del total.
>
> Mi idea es obtener la suma total del Kgs pedidos y después hacer un
> select
> con un campo añadido, por ejemplo, "grupo" donde indicare si forma
> parte
> del
> grupo del 60%, del 30% o del 10%.
>
> Luego con el crystal reports haré un report que me agrupara los
> clientes
> por
> el campo añadido "grupo".
>
> No se como hacerlo de esta forma, o a lo mejor existe una forma mejor
> de
> hacerlo.
>
> Toda ayuda sera de agradecer. Muchas gracias por todo.
>









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida