Sumar grupos

05/03/2004 - 20:46 por Raul Romero | Informe spam
Buenas tardes ...

Tengo una tabla como esta

CREATE TABLE [#Test]
(
[Col1] [int] NOT NULL ,
[Col2] [int] NULL ,
[Col3] [int] NULL
)

INSERT INTO [#test] ([col1],[col2],[col3])VALUES(1,100,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(2,101,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(3,101,1001)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(4,102,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(5,103,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(6,103,1004)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(7,103,1005)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(8,104,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(9,105,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(10,105,1007)

Quisiera obtener algo como esto ...

col1 col2 col3 Cuenta
1 100 null 1
2 101 null 2
3 101 1001 2
4 102 null 1
5 103 null 3
6 103 1004 3
7 103 1005 3
8 104 null 1
9 105 null 2
10 105 1007 2

Muchas gracias por su ayuda ...

Saludos,
Raul

Preguntas similare

Leer las respuestas

#1 Maximiliano D. A.
05/03/2004 - 20:47 | Informe spam
a ver si esto te ayuda:

Select #test.col1,#test.col2,#test.col3,otro.cuenta from #test left join (
Select count(*),col2 from #test group by col2) otro on
otro.col2 = #test.col2


suerte

pd: no lo probe asi que fijate como adaptarlo si?


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Raul Romero" escribió en el mensaje
news:
Buenas tardes ...

Tengo una tabla como esta

CREATE TABLE [#Test]
(
[Col1] [int] NOT NULL ,
[Col2] [int] NULL ,
[Col3] [int] NULL
)

INSERT INTO [#test] ([col1],[col2],[col3])VALUES(1,100,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(2,101,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(3,101,1001)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(4,102,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(5,103,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(6,103,1004)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(7,103,1005)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(8,104,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(9,105,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(10,105,1007)

Quisiera obtener algo como esto ...

col1 col2 col3 Cuenta
1 100 null 1
2 101 null 2
3 101 1001 2
4 102 null 1
5 103 null 3
6 103 1004 3
7 103 1005 3
8 104 null 1
9 105 null 2
10 105 1007 2

Muchas gracias por su ayuda ...

Saludos,
Raul







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 21/02/2004
Respuesta Responder a este mensaje
#2 ulises
05/03/2004 - 20:57 | Informe spam
Una solución :

SELECT a.col1, a.col2, a.col3, b.suma
FROM #test a JOIN ( SELECT col2, count(*) as suma FROM
#test group by col2) as b ON ( a.col2 = b.col2 )
ORDER BY a.col1, a.col2

Saludos,
Ulises

Buenas tardes ...

Tengo una tabla como esta

CREATE TABLE [#Test]
(
[Col1] [int] NOT NULL ,
[Col2] [int] NULL ,
[Col3] [int] NULL
)

INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(1,100,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(2,101,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(3,101,1001)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(4,102,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(5,103,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(6,103,1004)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(7,103,1005)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(8,104,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(9,105,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES


(10,105,1007)

Quisiera obtener algo como esto ...

col1 col2 col3 Cuenta
1 100 null 1
2 101 null 2
3 101 1001 2
4 102 null 1
5 103 null 3
6 103 1004 3
7 103 1005 3
8 104 null 1
9 105 null 2
10 105 1007 2

Muchas gracias por su ayuda ...

Saludos,
Raul


.

Respuesta Responder a este mensaje
#3 Javier Loria
05/03/2004 - 21:00 | Informe spam
Hola Raul:
Muchas gracias por el DDL, hace la vida mucho mas facil.
SELECT T.Col1, T.Col2, T.Col3, Cuenta
FROM #Test AS T JOIN
(SELECT col2, count(*) AS Cuenta
FROM #Test
GROUP BY col2) AS C
ON T.Col2=C.Col2
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Raul Romero escribio:
Buenas tardes ...

Tengo una tabla como esta

CREATE TABLE [#Test]
(
[Col1] [int] NOT NULL ,
[Col2] [int] NULL ,
[Col3] [int] NULL
)

INSERT INTO [#test] ([col1],[col2],[col3])VALUES(1,100,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(2,101,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(3,101,1001)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(4,102,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(5,103,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(6,103,1004)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(7,103,1005)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(8,104,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(9,105,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(10,105,1007)

Quisiera obtener algo como esto ...

col1 col2 col3 Cuenta
1 100 null 1
2 101 null 2
3 101 1001 2
4 102 null 1
5 103 null 3
6 103 1004 3
7 103 1005 3
8 104 null 1
9 105 null 2
10 105 1007 2

Muchas gracias por su ayuda ...

Saludos,
Raul
Respuesta Responder a este mensaje
#4 Maximiliano D. A.
05/03/2004 - 21:40 | Informe spam
jeje creo que no tenes opciones, 3 personas respondimos lo mismo a un mismo
problema :-D

Bye


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Raul Romero" escribió en el mensaje
news:
Buenas tardes ...

Tengo una tabla como esta

CREATE TABLE [#Test]
(
[Col1] [int] NOT NULL ,
[Col2] [int] NULL ,
[Col3] [int] NULL
)

INSERT INTO [#test] ([col1],[col2],[col3])VALUES(1,100,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(2,101,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(3,101,1001)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(4,102,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(5,103,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(6,103,1004)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(7,103,1005)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(8,104,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(9,105,NULL)
INSERT INTO [#test] ([col1],[col2],[col3])VALUES(10,105,1007)

Quisiera obtener algo como esto ...

col1 col2 col3 Cuenta
1 100 null 1
2 101 null 2
3 101 1001 2
4 102 null 1
5 103 null 3
6 103 1004 3
7 103 1005 3
8 104 null 1
9 105 null 2
10 105 1007 2

Muchas gracias por su ayuda ...

Saludos,
Raul







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 21/02/2004
Respuesta Responder a este mensaje
#5 Norman A. Armas
05/03/2004 - 22:48 | Informe spam
Bueno tanto como no tener mas opcion no creo
esta es una por ejemplo..
(lo que no se si sera mas optima o no poniendole indexes a la tabla y
testeandola con una cantidad de datos razonable)

SELECT
a.col1, a.col2, a.col3,
suma=(
SELECT
count(*)
FROM
#test b
WHERE
b.col2 = a.col2 )
FROM
#test a
ORDER BY
a.col1, a.col2

Saludos,

Norman



"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> wrote in message
news:
jeje creo que no tenes opciones, 3 personas respondimos lo mismo a un


mismo
problema :-D

Bye


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Raul Romero" escribió en el mensaje
news:
> Buenas tardes ...
>
> Tengo una tabla como esta
>
> CREATE TABLE [#Test]
> (
> [Col1] [int] NOT NULL ,
> [Col2] [int] NULL ,
> [Col3] [int] NULL
> )
>
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(1,100,NULL)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(2,101,NULL)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(3,101,1001)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(4,102,NULL)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(5,103,NULL)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(6,103,1004)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(7,103,1005)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(8,104,NULL)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(9,105,NULL)
> INSERT INTO [#test] ([col1],[col2],[col3])VALUES(10,105,1007)
>
> Quisiera obtener algo como esto ...
>
> col1 col2 col3 Cuenta
> 1 100 null 1
> 2 101 null 2
> 3 101 1001 2
> 4 102 null 1
> 5 103 null 3
> 6 103 1004 3
> 7 103 1005 3
> 8 104 null 1
> 9 105 null 2
> 10 105 1007 2
>
> Muchas gracias por su ayuda ...
>
> Saludos,
> Raul
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 21/02/2004


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida