Group by Having

04/04/2005 - 19:09 por grancesarx | Informe spam
Amigos del foro:
Me interesa tener una lista de grupos de una tabla PUNTOS
100
100A
100B
100C
200A
200B
200C
200D
En fin, esta tabla de Puntos de Venta tiene grupos de registros que son
homogéneos por su ubicación o propietarios. Y cuando esto ocurre (no
siempre) se distinguen porque existe un registro con TRES DIGITOS que
identifica el Punto Principal y los puntos del mismo grupo se le adiciona
una LETRA MAYUSCULA. El objetivo es tener una vista con estas columnas:
CODIGO PRINCIPAL con los tres dígitos
CANTIDAD REGISTROS o puntos
NOMBRE DEL PUNTO PRINCIPAL
El siguiente código me da error

SELECT count(*),SUBSTRING(codigo,1,3) as codtres,codigo,nombre,activo
FROM punto where activo = 1
GROUP BY codtres HAVING count(*) > 1 ORDER BY codigo

Me pueden indicar como hacerlo y/o qué error hay en este código

Gracias por la Ayuda que me puedan dar.

Atentamente,


César Fuentes

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
04/04/2005 - 22:21 | Informe spam
Gracias por postear los ejemplos y el resultado esperado. Trata:

SELECT
left(codigo, 3) as codtres,
max(case when patindex('%[^0-9]%', nombre) = 0 then nombre end),
count(case when activo = 1 then 1 end) as [cantidad de puntos]
FROM
punto
GROUP BY
left(codigo, 3)
HAVING
count(*) > 1
ORDER BY
codtres;

Quite el filtro activo = 1 de la clausula WHERE para poder cojer siempre el
nombre del principal aunque este no este activo, pero solo cuenta los activos
por grupos.


AMB

"grancesarx" wrote:

Gracias por el interés, espero pueda explicarles.

Datos en la Tabla PUNTOS

CODIGO NOMBRE ACTIVO
100 NOGAL PPAL 1
100A NOGAL AV 5 1
100B NOGAL CL 3 1
100C NOGAL SUC 4 1
200 BETA PPAL 1
200A BETA UNO 1
200B BETA ANTIGUA 1
200C BETA RECUERDO 1
200D BETA CL 10 0
200E BETA 9X 1
151 KIKO PPAL 1
151A KIKO UNO 1
151B KIKO DOS 1
151C KIKO LA PLAYA 1
...
Requiero una lista para un DropDownList en ASP.NET, y otros propósitos

codtres nombre cantidad puntos
100 NOGAL PPAL 4
200 BETA PPAL 5 (Sin 1 que no está activo)
151 KIKO PPAL 4

Gracias por su Ayuda.

Atentamente,


César Fuentes




Respuesta Responder a este mensaje
#7 Alejandro Mesa
04/04/2005 - 22:31 | Informe spam
Aqui expongo otra forma de hacerlo en conjunto con la anterior para que
compares y escojas la que mejor rendimiento tenga en tu ambiente.

use northwind
go

create table puntos (
CODIGO varchar(10),
NOMBRE varchar(25),
ACTIVO int
)
go

insert into puntos values('100', 'NOGAL PPAL', 1)
insert into puntos values('100A', 'NOGAL AV 5', 1)
insert into puntos values('100B', 'NOGAL CL 3', 1)
insert into puntos values('100C', 'NOGAL SUC 4', 1)
insert into puntos values('200', 'BETA PPAL', 1)
insert into puntos values('200A', 'BETA UNO', 1)
insert into puntos values('200B', 'BETA ANTIGUA', 1)
insert into puntos values('200C', 'BETA RECUERDO', 1)
insert into puntos values('200D', 'BETA CL 10', 0)
insert into puntos values('200E', 'BETA 9X', 1)
insert into puntos values('151', 'KIKO PPAL', 1)
insert into puntos values('151A', 'KIKO UNO', 1)
insert into puntos values('151B', 'KIKO DOS', 1)
insert into puntos values('151C', 'KIKO LA PLAYA', 1)
go

SELECT
left(codigo, 3) as codtres,
max(case when patindex('%[^0-9]%', nombre) = 0 then nombre end) as nombre,
count(case when activo = 1 then 1 end) as [cantidad de puntos]
FROM
puntos
GROUP BY
left(codigo, 3)
HAVING
count(*) > 1
ORDER BY
codtres

SELECT
left(codigo, 3) as codtres,
(select [nombre] from puntos as p1 where p1.codigo = left(p.codigo, 3)) as
[nombre],
count(*) as [cantidad de puntos]
FROM
puntos as p
where
activo = 1
GROUP BY
left(codigo, 3)
HAVING
count(*) > 1
ORDER BY
codtres
go

drop table puntos
go


AMB


"Alejandro Mesa" wrote:

Gracias por postear los ejemplos y el resultado esperado. Trata:

SELECT
left(codigo, 3) as codtres,
max(case when patindex('%[^0-9]%', nombre) = 0 then nombre end),
count(case when activo = 1 then 1 end) as [cantidad de puntos]
FROM
punto
GROUP BY
left(codigo, 3)
HAVING
count(*) > 1
ORDER BY
codtres;

Quite el filtro activo = 1 de la clausula WHERE para poder cojer siempre el
nombre del principal aunque este no este activo, pero solo cuenta los activos
por grupos.


AMB

"grancesarx" wrote:

> Gracias por el interés, espero pueda explicarles.
>
> Datos en la Tabla PUNTOS
>
> CODIGO NOMBRE ACTIVO
> 100 NOGAL PPAL 1
> 100A NOGAL AV 5 1
> 100B NOGAL CL 3 1
> 100C NOGAL SUC 4 1
> 200 BETA PPAL 1
> 200A BETA UNO 1
> 200B BETA ANTIGUA 1
> 200C BETA RECUERDO 1
> 200D BETA CL 10 0
> 200E BETA 9X 1
> 151 KIKO PPAL 1
> 151A KIKO UNO 1
> 151B KIKO DOS 1
> 151C KIKO LA PLAYA 1
> ...
> Requiero una lista para un DropDownList en ASP.NET, y otros propósitos
>
> codtres nombre cantidad puntos
> 100 NOGAL PPAL 4
> 200 BETA PPAL 5 (Sin 1 que no está activo)
> 151 KIKO PPAL 4
>
> Gracias por su Ayuda.
>
> Atentamente,
>
>
> César Fuentes
>
>
>
>
Respuesta Responder a este mensaje
#8 grancesarx
04/04/2005 - 23:20 | Informe spam
Gracias por su ayuda, sin esto estaría haciendo muchas líneas de código para
lograrlo.
Alejandro, la Segunda de opción funcionó con mi archivo.
Han sido pero muy amables.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida