Consulta SQL

03/11/2004 - 13:37 por Lara | Informe spam
Hola grupo!!

Necesito realizar una consulta sobre una tabla y no se me ocurre cómo
hacerla.

Os envío un pequeño ejemplo en un script que crea la tabla y la carga con
datos.


CREATE TABLE [dbo].[Tabla] (
[IdTabla] [int] NOT NULL ,
[Codigo] [int] NULL ,
[Descripcion] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 1')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 2')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 4')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 2, N'Descripcion 2')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 2, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 3, N'Descripcion 6')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 4, N'Descripcion 1')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 2, N'Descripcion 2')

INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 2, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 5, N'Descripcion 3')


La consulta que yo quería hacer siempre filtra por un IdTabla, y tengo que
mostrar TODOS los campos de la tabla, pero realizando un distinct, de tal
forma, que me muestre SÓLO un registro por cada Codigo, me da igual el que
sea, si aparece cuatro veces, me basta con el primer registro.

Ejecuten esta select:
select * from tabla where idtabla=1

El resultado es:

IdTabla Codigo Descripcion
1 1 Descripcion 1
1 1 Descripcion 2
1 1 Descripcion 3
1 1 Descripcion 4
1 2 Descripcion 2
1 2 Descripcion 3
1 3 Descripcion 6
1 4 Descripcion 1


Y el resultado que quiero conseguir es:

IdTabla Codigo Descripcion
1 1 Descripcion 1
1 2 Descripcion 2
1 3 Descripcion 6
1 4 Descripcion 1


Sólo quiero mostrar un registro por cada Codigo.


Podría añadir algún campo nuevo en la tabla, si así fuera más fácil obtener
el resultado que quiero, pero NO puedo eliminar ningún campo..
Es que realmente mi tabla, es una vista.., pero para simplificar la
explicación, os he puesto sólo los tres campos que me interesan, pero podría
obtener alguna columna más en la vista que facilitara la consulta.


A ver si alguien puede ayudarme.
Muchas gracias!
Lara

Preguntas similare

Leer las respuestas

#1 ulises
03/11/2004 - 14:02 | Informe spam
Solo necesitas agruparlo y en la descripción usar MIN o MAX
según sea el criterio para obtener la descripción, algo como :

SELECT IdTabla, Codigo, MIN(Descripcion) FROM Tabla
WHERE idTabla = 1
GROUP BY IdTabla, Codigo

Saludos,
Ulises

Hola grupo!!

Necesito realizar una consulta sobre una tabla y no se me


ocurre cómo
hacerla.

Os envío un pequeño ejemplo en un script que crea la


tabla y la carga con
datos.


CREATE TABLE [dbo].[Tabla] (
[IdTabla] [int] NOT NULL ,
[Codigo] [int] NULL ,
[Descripcion] [varchar] (50) COLLATE


SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 1')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 2')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 4')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 2, N'Descripcion 2')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 2, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 3, N'Descripcion 6')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 4, N'Descripcion 1')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 2, N'Descripcion 2')

INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 2, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 5, N'Descripcion 3')


La consulta que yo quería hacer siempre filtra por un


IdTabla, y tengo que
mostrar TODOS los campos de la tabla, pero realizando un


distinct, de tal
forma, que me muestre SÓLO un registro por cada Codigo, me


da igual el que
sea, si aparece cuatro veces, me basta con el primer registro.

Ejecuten esta select:
select * from tabla where idtabla=1

El resultado es:

IdTabla Codigo Descripcion
1 1 Descripcion 1
1 1 Descripcion 2
1 1 Descripcion 3
1 1 Descripcion 4
1 2 Descripcion 2
1 2 Descripcion 3
1 3 Descripcion 6
1 4 Descripcion 1


Y el resultado que quiero conseguir es:

IdTabla Codigo Descripcion
1 1 Descripcion 1
1 2 Descripcion 2
1 3 Descripcion 6
1 4 Descripcion 1


Sólo quiero mostrar un registro por cada Codigo.


Podría añadir algún campo nuevo en la tabla, si así fuera


más fácil obtener
el resultado que quiero, pero NO puedo eliminar ningún campo..
Es que realmente mi tabla, es una vista.., pero para


simplificar la
explicación, os he puesto sólo los tres campos que me


interesan, pero podría
obtener alguna columna más en la vista que facilitara la


consulta.


A ver si alguien puede ayudarme.
Muchas gracias!
Lara

















.

Respuesta Responder a este mensaje
#2 Lara
03/11/2004 - 14:44 | Informe spam
Qué consulta tan sencilla!
Me suena que la he utilizado alguna vez..
Ahora tengo un problema, que me he dado cuenta que mi tabla (vista) tiene
más campos que varían además de la Descripcion, entonces la cosa se complica
no? porque si saco el mínimo de esos campos, luego entre sí igual no
corcuendan... Por ejemplo, si muestro el min(provincia) y el min(pais) igual
la provincia que muestro no pertenece a la provincia.. Voy a tener que
realizar Subselects que me filtren correctamente para que los campos tengan
sentido.
Pero muchas gracias! ahora lo veo más fácil, solo es cuestión de probar.








"ulises" escribió en el mensaje
news:16b101c4c1a5$6bf06de0$
Solo necesitas agruparlo y en la descripción usar MIN o MAX
según sea el criterio para obtener la descripción, algo como :

SELECT IdTabla, Codigo, MIN(Descripcion) FROM Tabla
WHERE idTabla = 1
GROUP BY IdTabla, Codigo

Saludos,
Ulises

Hola grupo!!

Necesito realizar una consulta sobre una tabla y no se me


ocurre cómo
hacerla.

Os envío un pequeño ejemplo en un script que crea la


tabla y la carga con
datos.


CREATE TABLE [dbo].[Tabla] (
[IdTabla] [int] NOT NULL ,
[Codigo] [int] NULL ,
[Descripcion] [varchar] (50) COLLATE


SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 1')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 2')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 1, N'Descripcion 4')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 2, N'Descripcion 2')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 2, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 3, N'Descripcion 6')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (1, 4, N'Descripcion 1')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 2, N'Descripcion 2')

INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 2, N'Descripcion 3')


INSERT INTO [dbo].[Tabla] ([IdTabla], [Codigo], [Descripcion])
VALUES (2, 5, N'Descripcion 3')


La consulta que yo quería hacer siempre filtra por un


IdTabla, y tengo que
mostrar TODOS los campos de la tabla, pero realizando un


distinct, de tal
forma, que me muestre SÓLO un registro por cada Codigo, me


da igual el que
sea, si aparece cuatro veces, me basta con el primer registro.

Ejecuten esta select:
select * from tabla where idtabla=1

El resultado es:

IdTabla Codigo Descripcion
1 1 Descripcion 1
1 1 Descripcion 2
1 1 Descripcion 3
1 1 Descripcion 4
1 2 Descripcion 2
1 2 Descripcion 3
1 3 Descripcion 6
1 4 Descripcion 1


Y el resultado que quiero conseguir es:

IdTabla Codigo Descripcion
1 1 Descripcion 1
1 2 Descripcion 2
1 3 Descripcion 6
1 4 Descripcion 1


Sólo quiero mostrar un registro por cada Codigo.


Podría añadir algún campo nuevo en la tabla, si así fuera


más fácil obtener
el resultado que quiero, pero NO puedo eliminar ningún campo..
Es que realmente mi tabla, es una vista.., pero para


simplificar la
explicación, os he puesto sólo los tres campos que me


interesan, pero podría
obtener alguna columna más en la vista que facilitara la


consulta.


A ver si alguien puede ayudarme.
Muchas gracias!
Lara

















.

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