¿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

#1 Jose Mariano Alvarez
31/03/2007 - 03:29 | Informe spam
En el post ,
DIJO .
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.




Creo que si se puede hacer aunque lo mas facil para mi seria usar MDX y
reporting services en un modelo ROLAP.

Con que version de SQL estas trabajando?
Si es con 2005 busca RANK en la ayuda.
Haces rabgos de 10% y luego usas eso como una tabla derivada.
Tambien podrias intentar usando common table expressions CTE.




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)


IMPORTANTE

Por favor traten de indicar la versión de SQL y Service Pack.
La inclusión de (CREATE, INSERTS, etc.) para poder reproducir el
problema también ayuda.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
31/03/2007 - 18:03 | Informe spam
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
#3 Daymar
31/03/2007 - 22:50 | Informe spam
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
#4 Alejandro Mesa
01/04/2007 - 03:25 | Informe spam
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
#5 Daymar
01/04/2007 - 09:22 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida