SQL Server - Consulta anidada para devolver sólo los primeros registros...

 
Vista:

Consulta anidada para devolver sólo los primeros registros...

Publicado por Miguel (4 intervenciones) el 08/03/2016 12:50:12
Tenemos dos tablas, una con un sólo campo código EAN,(Sin duplicados). La otra tabla contiene entre otros datos el EAN y la DESCRIPCION del articulo. La segunda tabla puede tener varios productos con el mismo EAN, pero con diferente DESCRIPCION, (El motivo es que son productos con el mismo EAN, pero por ser envasados en diferentes formatos, se les asigna diferente código de producto pero el EAN del producto es el mismo).

ejemplo:
TABLA 1 TABLA 2
EAN EAN DESCRIPCIÓN PRODUCTO
8410877101045 8410877101045 MIL LÍQUIDO 1 L.CJ 6 BRIKS
8410877101045 8410877101045 MIL 1 L.CJ 8 BRIKS 864 L.
8410877101045 8410877101045 MIL LIQUIDO 1 L.
8410877101046 8410877101046 LECHE 1 L.CJ 6 B MP 432 L
8410877101046 8410877101046 LECHE 1 L CJ 8 B MP 384 L


Objetivo:
Construir una consulta que sólo nos devuelva los datos de la TABLA 2 pero sólo el primer registro y no todos los que tienen el mismo EAN, Esto ha de hacerse en la consulta con todos los registros que en la TABLA 2 tengan el mismo EAN.

Consulta Resultado:
8410877101045 MIL LÍQUIDO 1 L.CJ 6 BRIKS
8410877101046 LECHE 1 L.CJ 6 B MP 432 L

Muchas gracias por su colaboración.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta anidada para devolver sólo los primeros registros...

Publicado por Isaias (4558 intervenciones) el 08/03/2016 18:12:48
Veamos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create table #EAN (EAN char(13), DescripcionProducto varchar(50))
insert into #EAN Values('8410877101045','MIL LÍQUIDO 1 L.CJ 6 BRIKS'),
('8410877101045','MIL 1 L.CJ 8 BRIKS 864 L.'),
('8410877101045','MIL LIQUIDO 1 L.'),
('8410877101046','LECHE 1 L.CJ 6 B MP 432 L'),
('8410877101046','LECHE 1 L CJ 8 B MP 384 L')
 
 
select * from
(
select a.EAN,
	a.DescripcionProducto,
	ROW_NUMBER () OVER (PARTITION BY a.EAN
					ORDER BY a.EAN, a.DescripcionProducto ASC) AS RN
from #EAN a
) t1 where rn <= 1

EAN DescripcionProducto RN
8410877101045 MIL 1 L.CJ 8 BRIKS 864 L. 1
8410877101046 LECHE 1 L CJ 8 B MP 384 L 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta anidada para devolver sólo los primeros registros...

Publicado por Miguel (4 intervenciones) el 08/03/2016 18:42:41
Muchas gracias Isaias, lo implemento ya. Tengo que documentarme un poco sobre la sentencia PARTITION Y OVER, pero he visto por tu código que funcionan tal como quiero. Repito muchas gracias, salud y suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta anidada para devolver sólo los primeros registros...

Publicado por Isaias (4558 intervenciones) el 08/03/2016 20:03:46
Sin problema, que bueno que te sirvio, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta anidada para devolver sólo los primeros registros...

Publicado por Miguel (4 intervenciones) el 09/03/2016 11:09:05
Isaias, tengo un problema, e incluído sólo la consulta central sin ninguna consulta anidada, es decir:

SELECT EAN, Descripción,
ROW_NUMBER () OVER (PARTITION BY EAN ORDER BY EAN, Descripción ASC) AS RN
FROM dbo.t_Articulos_qv
where RN <=1

Me devuelve un error, dice que EL nombre de columna RN no es válido?

Muchas gracias y disculpa las molestias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta anidada para devolver sólo los primeros registros...

Publicado por Miguel (4 intervenciones) el 09/03/2016 14:21:40
Estoy torpe, Isaias, lo siento. Ya he visto como solucionarlo, haciendo otra consulta que use la anterior y preguntando por ese campo.


Disculpa las molestias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta anidada para devolver sólo los primeros registros...

Publicado por Isaias (4558 intervenciones) el 09/03/2016 19:48:40
Que bueno que identificaste el problema. Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar