SQL - Duda con consulta que parece facil

   
Vista:

Duda con consulta que parece facil

Publicado por Jose Manuel (2 intervenciones) el 08/08/2011 11:07:46
Hola tengo una duda con una consulta sobre dos tablas, os cuento, tengo dos tablas una de reservas y otra con articulosReservas, la tabla Reservas tiene varios datos y la tabla articulosReservas tiene los siguientes campos:

Reservas
IdReserva | IdCliente | FechaDesde | FechaHasta .....
--------------------------------------------------------------------------------
1 1 24/07/2011 01/08/2011



ArticulosReservas

IdArticuloReserva | IdReserva | IdArticulo | Cantidad | Precio
----------------------------------------------------------------------------------------
1 | 1 | 1 | 3 | 24,89
2 | 1 | 2 | 1 | 12,90
3 | 1 | 3 | 2 | 4,00
4 | 2 | 1 | 1 | 8,90

Tambian tengo una tabla Articulos con el nombre del articulo

Lo que quiero es mostrar los siguientes datos de una consulta:
IdReserva IdCliente, FechaDesde, FechaHasta , NombreArticulo, Cantidad, Precio

Y si hago la siguiente consulta:

SELECT Reservas.IdReserva, Reservas.IdCliente, Reservas.FechaDesde, Reservas.FechaHasta,
CASE IdArticulo WHEN 1 THEN Cantidad ELSE 0 END AS 'SOMBRILLA',
CASE IdArticulo WHEN 2 THEN Cantidad ELSE 0 END AS 'TUMBONA',
CASE IdArticulo WHEN 3 THEN Cantidad ELSE 0 END AS 'BUTACA'
FROM Reservas LEFT JOIN ArticulosReservas
ON Reservas.IdReserva = ArticulosReservas.IdReserva

Pero me muestra los datos de la siguiente manera:

IdReserva IdCliente FechaDesde FechaHasta SOMBRILLA TUMBONA BUTACA
3 1 2011-07-10 2011-08-10 1 0 0
3 1 2011-07-10 2011-08-10 0 1 0
3 1 2011-07-10 2011-08-10 0 0 2

4 2 2011-07-10 2011-08-10 2 0 0
4 2 2011-07-10 2011-08-10 0 1 0

Hay alguna manera de que aparezca los datos de sombrilla tumbona y butaca en la misma fila sin duplicarme las filas con el mismo IdReserva?

Espero que me podais exar una mano.

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

Duda con consulta que parece facil

Publicado por leonardo_josue (878 intervenciones) el 08/08/2011 18:10:22
Hola José Manuel:

Tal como tienes tu información sólo te faltaría hacer una agrupación por todos tus campos y en cada CASE-WHEN hacer una sumatoria, podría quedar más o menos así:

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
30
31
32
TU CONSULTA SIN AGRUPAR
mysql> SELECT Reservas.IdReserva, Reservas.IdCliente, Reservas.FechaDesde, Reser
vas.FechaHasta,
    -> CASE IdArticulo WHEN 1 THEN Cantidad ELSE 0 END AS 'SOMBRILLA',
    -> CASE IdArticulo WHEN 2 THEN Cantidad ELSE 0 END AS 'TUMBONA',
    -> CASE IdArticulo WHEN 3 THEN Cantidad ELSE 0 END AS 'BUTACA'
    -> FROM Reservas LEFT JOIN ArticulosReservas
    -> ON Reservas.IdReserva = ArticulosReservas.IdReserva;
+-----------+-----------+------------+------------+-----------+---------+--------+
| IdReserva | IdCliente | FechaDesde | FechaHasta | SOMBRILLA | TUMBONA | BUTACA |
+-----------+-----------+------------+------------+-----------+---------+--------+
|         1 |         1 | 2011-07-24 | 2011-08-01 |         3 |       0 |      0 |
|         1 |         1 | 2011-07-24 | 2011-08-01 |         0 |       1 |      0 |
|         1 |         1 | 2011-07-24 | 2011-08-01 |         0 |       0 |      2 |
+-----------+-----------+------------+------------+-----------+---------+--------+
3 rows in set (0.00 sec)
 
AGRUPANDO Y SUMARIZANDO
mysql> SELECT Reservas.IdReserva, Reservas.IdCliente, Reservas.FechaDesde, Reser
vas.FechaHasta,
    -> SUM(CASE IdArticulo WHEN 1 THEN Cantidad ELSE 0 END) AS 'SOMBRILLA',
    -> SUM(CASE IdArticulo WHEN 2 THEN Cantidad ELSE 0 END) AS 'TUMBONA',
    -> SUM(CASE IdArticulo WHEN 3 THEN Cantidad ELSE 0 END) AS 'BUTACA'
    -> FROM Reservas LEFT JOIN ArticulosReservas
    -> ON Reservas.IdReserva = ArticulosReservas.IdReserva
    -> GROUP BY 1,2,3,4;
+-----------+-----------+------------+------------+-----------+---------+--------+
| IdReserva | IdCliente | FechaDesde | FechaHasta | SOMBRILLA | TUMBONA | BUTACA |
+-----------+-----------+------------+------------+-----------+---------+--------+
|         1 |         1 | 2011-07-24 | 2011-08-01 |         3 |       1 |      2 |
+-----------+-----------+------------+------------+-----------+---------+--------+
1 row in set (0.00 sec)


Si observas es prácticamente la misma consulta que tu estás haciendo, solo agregué SUM en casa rubro y el GROUP BY al final de la consulta. Con eso debería bastar.

Dale un vistazo y nos comentas si te sirvió el código

Saludos
Leo.
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

Duda con consulta que parece facil

Publicado por JOSE MANUEL (2 intervenciones) el 08/08/2011 18:28:36
Muchas gracias, hace exactamente lo que necesitaba.
Un saludo!!!
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