SQL Server - dudas sobre joint

 
Vista:

dudas sobre joint

Publicado por eleazar (3 intervenciones) el 17/04/2021 20:38:28
Buenas tardes, tengo 3 bases de datos donde estan formadas de la siguiente forma:

Productos Precios Combustibles
IDProducto IDProducto IDProducto
Descripcion Fecha Fecha
Precio Litros

en productos tengo:
idproducto Descripcion
1 MAGNA
2 PREMIUM
3 DIESEL

En precios (por fecha)
idproducto fecha precio
1 01/01/2021 5.00
2 01/01/2021 6.00
3 01/01/2021 5.50
...asi sucesivamente hasta la fecha de hoy

En Combustibles
idproducto
idproducto fecha Litros
1 01/01/2021 120.00
2 01/01/2021 60.00
3 01/01/2021 90.00
...asi sucesivamente hasta la fecha de hoy

utilizo el siguiente joint:

1
2
3
select * from Combustibles join Productos on Combustibles.IDPRODUCTO=Productos.IDPRODUCTO join
Precios on Precios.FECHA=Combustibles.FECHA
order by Combustibles.FECHA, Combustibles.IDPRODUCTO

y en la pantalla de resultados me aparece 3 veces la fecha y el producto1, despues el 2, despues el 3
por ejemplo me aparece para el 01/01/2021 3 renglones de magna, 3 renglones de premium y 3 de diesel
seria algo asi

idproducto fecha Litros Precio
1 01/01/2021 120.00 5.00
1 01/01/2021 120.00 6.00
1 01/01/2021 120.00 5.50
2 01/01/2021 60.00 5.00
2 01/01/2021 60.00 6.00
2 01/01/2021 60.00 5.50
3 01/01/2021 90.00 5.00
3 01/01/2021 90.00 6.00
3 01/01/2021 90.00 5.50


me gustaria que me orientaran como le puedo hacer para que solo me aparezca solamente por dia 1 linea por producto que seria asi

idproducto fecha Litros Precio
1 01/01/2021 120.00 5.00
2 01/01/2021 60.00 6.00
3 01/01/2021 90.00 5.50

soy nuevo en esto de sql, estos usando la version 2012 y estoy utilizando el sql manager

Gracias
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 David
Val: 3
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

dudas sobre joint

Publicado por David (1 intervención) el 18/04/2021 10:35:55
Tienes que poner un GROUP BY fecha
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

dudas sobre joint

Publicado por Isaias (4558 intervenciones) el 18/04/2021 16:09:16
Hola

Es una pena que no nos pasen el codigo de creacion de sus TABLAS (que no bases de datos) y el INSERT de los datos de prueba, dime si esto te sirve

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
declare @productos table (idProducto int, Descripcion char(20))
declare @precios table (idProducto int, fecha datetime, precio money)
declare @combustibles table (idProducto int, fecha datetime, litros decimal (10,2))
 
insert into @productos VALUES(
1, 'MAGNA'),
(2, 'PREMIUM'),
(3, 'DIESEL')
 
insert into @precios VALUES(
1 ,'01/01/2021', 5.00),
(2 ,'01/01/2021', 6.00),
(3 ,'01/01/2021', 5.50)
 
insert into @combustibles VALUES(
1 ,'01/01/2021', 120.00),
(2 ,'01/01/2021', 60.00),
(3 ,'01/01/2021', 90.00)
 
SELECT * FROM (
SELECT  ROW_NUMBER() OVER(PARTITION BY p.IDPRODUCTO ORDER BY c.Fecha DESC) AS R,
c.idProducto,
pr.fecha,
c.litros,
pr.precio
FROM @combustibles c join @productos P on c.IDPRODUCTO=p.IDPRODUCTO join
@Precios pr on pr.FECHA=c.FECHA)
--order by c.FECHA, c.IDPRODUCTO
AS r where r.r=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

dudas sobre joint

Publicado por eleazar (3 intervenciones) el 19/04/2021 19:35:44
Perdon isaias, es que soy nuevo en esto de sql y tomere tu comentario como aprendizaje en caso de otra duda, lo resolvi de esta manera para que tambien me aparezcan los datos que deseo:

select Combustibles.FECHA,Combustibles.IDPRODUCTO,Productos.DESCRIPCION,
Combustibles.Litros, Precios.PRECIO from
Combustibles join Productos on Combustibles.IDPRODUCTO=Productos.IDPRODUCTO join
Precios on Precios.FECHA=Combustibles.FECHA where Precios.FECHA=Combustibles.FECHA and Precios.IDPRODUCTO=Combustibles.IDPRODUCTO
order by Combustibles.FECHA, Combustibles.IDPRODUCTO

ya me aparece de la manera que deseo:

fecha idproducto Descripcion Litros Precio
01/01/2021 1 MAGNA 120.00 5.00
01/01/2021 2 PREMIUM 60.00 6.00
01/01/2021 3 DIESEL 90.00 5.50

Como les comento, soy nuevo en esto de SQL, lo que si no se como agregar seria un campo calculado de Litros * Precio

Gracias
Eleazar Ramirez
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

dudas sobre joint

Publicado por Isaias (4558 intervenciones) el 19/04/2021 23:36:55
Intentalo asi: (Combustibles.Litros * Precios.PRECIO) as Importe
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

dudas sobre joint

Publicado por eleazar (3 intervenciones) el 20/04/2021 17:47:18
Muchas gracias, con la formula que me indicaste funciono

Eleazar Ramirez
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