SQL group by, completando valores intermedios sin registros

05/06/2006 - 18:44 por Manekurt | Informe spam
Hola a todos, necesito armar una sentencia que selecciona distintas filaes,
agrupadas por un determinado campo, y complete en el agrupado los valores
intermedios que no poseen un valor, voy con un ejemplo para ser mas claro.

TABLA EJEMPLO

COL_A, COL_B
25.50 1
62.50 2
125.00 4
55.00 2
100.00 1
80.00 7
60.00 9

Estos son los valores de ejemplo que pose la tabla, lo que necesito es
realizar la sumatoria de la COL_A, agrupados los resultados por COL_B, pero
con la siguiente excepcion. En caso de los resultados en los que no hay un
valor, teniendo que por ejemplo necesito resultados del 1 al 10, para el 3,
5, 6, 8, y 10 no hay valores ingrersados, en ese caso necesitaria que me
agregue un registro en 0.00.
El resultado del script seria el siguiente

125.50 1
117.50 2
0.00 3
125.00 4
0.00 5
0.00 6
80.00 7
0.00 8
60.00 9
0.00 10

si esto no es posible sin hacer un Stored Proc, no habria problema, les
pediria si alguien pudiera enviarme un ejemplo de como realizar esto,
gracias!

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
05/06/2006 - 18:56 | Informe spam
Manekurt,

Una tabla de numeros te vendria perfecta para lo que quieres.

select identity(int, 1, 1) as numero
into dbo.numero
from sysobjects as a cross join sysobjects as b
go

select a.numero, sum(isnull(b.cal_a, 0)) as sum_col_a
from dbo.numero as a left join ejemplo as b
on a.numero = b.col_b
where a.numero between 1 and 10
group by a.numero
go

Why should I consider using an auxiliary numbers table?
http://www.aspfaq.com/show.asp?id%16


AMB

"Manekurt" wrote:

Hola a todos, necesito armar una sentencia que selecciona distintas filaes,
agrupadas por un determinado campo, y complete en el agrupado los valores
intermedios que no poseen un valor, voy con un ejemplo para ser mas claro.

TABLA EJEMPLO

COL_A, COL_B
25.50 1
62.50 2
125.00 4
55.00 2
100.00 1
80.00 7
60.00 9

Estos son los valores de ejemplo que pose la tabla, lo que necesito es
realizar la sumatoria de la COL_A, agrupados los resultados por COL_B, pero
con la siguiente excepcion. En caso de los resultados en los que no hay un
valor, teniendo que por ejemplo necesito resultados del 1 al 10, para el 3,
5, 6, 8, y 10 no hay valores ingrersados, en ese caso necesitaria que me
agregue un registro en 0.00.
El resultado del script seria el siguiente

125.50 1
117.50 2
0.00 3
125.00 4
0.00 5
0.00 6
80.00 7
0.00 8
60.00 9
0.00 10

si esto no es posible sin hacer un Stored Proc, no habria problema, les
pediria si alguien pudiera enviarme un ejemplo de como realizar esto,
gracias!





Respuesta Responder a este mensaje
#2 qwalgrande
05/06/2006 - 19:24 | Informe spam
Hola.

Una forma sería crear una tabla aparte con todos los valores que deben
aparecer y unirla a tu consulta de agrupados por un left join, sustituyendo
valores nulos por ceros:

select isnull(Grupo.Col_A,0.00) as Col_A, Ref.Col_B
from Ref left join (aquí, tu consulta con group by) as Grupo
on Ref.Col_B = Grupo.Col_B

No sé si me he explicado, si es así, me comentas.

Alberto López Grande (qwalgrande)


"Manekurt" escribió en el mensaje
news:OPV$
Hola a todos, necesito armar una sentencia que selecciona distintas
filaes, agrupadas por un determinado campo, y complete en el agrupado los
valores intermedios que no poseen un valor, voy con un ejemplo para ser
mas claro.

TABLA EJEMPLO

COL_A, COL_B
25.50 1
62.50 2
125.00 4
55.00 2
100.00 1
80.00 7
60.00 9

Estos son los valores de ejemplo que pose la tabla, lo que necesito es
realizar la sumatoria de la COL_A, agrupados los resultados por COL_B,
pero con la siguiente excepcion. En caso de los resultados en los que no
hay un valor, teniendo que por ejemplo necesito resultados del 1 al 10,
para el 3, 5, 6, 8, y 10 no hay valores ingrersados, en ese caso
necesitaria que me agregue un registro en 0.00.
El resultado del script seria el siguiente

125.50 1
117.50 2
0.00 3
125.00 4
0.00 5
0.00 6
80.00 7
0.00 8
60.00 9
0.00 10

si esto no es posible sin hacer un Stored Proc, no habria problema, les
pediria si alguien pudiera enviarme un ejemplo de como realizar esto,
gracias!




Respuesta Responder a este mensaje
#3 Manekurt
07/06/2006 - 20:03 | Informe spam
Muchas gracias alejandro, excelente tu ayuda, saludos


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

Una tabla de numeros te vendria perfecta para lo que quieres.

select identity(int, 1, 1) as numero
into dbo.numero
from sysobjects as a cross join sysobjects as b
go

select a.numero, sum(isnull(b.cal_a, 0)) as sum_col_a
from dbo.numero as a left join ejemplo as b
on a.numero = b.col_b
where a.numero between 1 and 10
group by a.numero
go

Why should I consider using an auxiliary numbers table?
http://www.aspfaq.com/show.asp?id%16


AMB

"Manekurt" wrote:

Hola a todos, necesito armar una sentencia que selecciona distintas
filaes,
agrupadas por un determinado campo, y complete en el agrupado los valores
intermedios que no poseen un valor, voy con un ejemplo para ser mas
claro.

TABLA EJEMPLO

COL_A, COL_B
25.50 1
62.50 2
125.00 4
55.00 2
100.00 1
80.00 7
60.00 9

Estos son los valores de ejemplo que pose la tabla, lo que necesito es
realizar la sumatoria de la COL_A, agrupados los resultados por COL_B,
pero
con la siguiente excepcion. En caso de los resultados en los que no hay
un
valor, teniendo que por ejemplo necesito resultados del 1 al 10, para el
3,
5, 6, 8, y 10 no hay valores ingrersados, en ese caso necesitaria que me
agregue un registro en 0.00.
El resultado del script seria el siguiente

125.50 1
117.50 2
0.00 3
125.00 4
0.00 5
0.00 6
80.00 7
0.00 8
60.00 9
0.00 10

si esto no es posible sin hacer un Stored Proc, no habria problema, les
pediria si alguien pudiera enviarme un ejemplo de como realizar esto,
gracias!





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