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!
 

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!





Preguntas similares