none
Consulta -- Obtener el valor maximo segun el tipo de habitacion SQL SERVER RRS feed

  • Pregunta


  • SQLSERVER--

    Buenas tengo una duda quisiera mostrar un valor maximo segun la denominacion y booking channel

    Ese es el codigo que uso ..

    select rs.BookingChannel , COUNT(*) as Cantidad_Reservas ,thp.Denominacion from Reserva rs inner join TipoHabitacion thp
    on rs.IDTipHabitacion=thp.IDTipHabitacion
    group by rs.BookingChannel,thp.Denominacion
    Order by BookingChannel

    Y me da el siguiente resultado(EJEMPLO) :

    BookingChannel | Cantidad_Reservas | Denominacion

    Booking.com      | 120                       | 10 Dom 202 Dormitory

    Booking.com      | 1880                     | 04 Dom 202 Dormitory

    Booking.com      | 130                       | 12 Dom 202 Dormitory

    Facebook.com    | 120                       | 101 Dormitory

    Facebook.com     | 150                     | 120 Dom 201 Dormitory

    Y quisiera que me dé este resultado  

    RESULTADO:

    BookingChannel | Cantidad_Reservas | Denominacion

    Booking.com      | 1880                     | 04 Dom 202 Dormitory

    Facebook.com    | 150                       | 120 Dom 201 Dormitory

    Alguien ayuda por favor.



    • Editado Fabian166 viernes, 24 de mayo de 2019 18:50
    viernes, 24 de mayo de 2019 18:49

Respuestas

  • Hola Fabian166:

    Existen multitud de caminos para realizar eso. Yo te voy a intentar enseñar uno que te ayudará bastante (eso espero), porque lo puedes aplicar muchas veces.

    Cuando este el resultado te pondré enlaces a diferentes conceptos que son importantes y te ayudarán a realizar esto.

    Empiezo: Lo primero es tu escenario y yo no voy a meterme en tú consulta, voy a suponer que es muy buena y la voy a meter su contenido en una variable tipo tabla para poder trabajar. (esta parte tu no la haces)

    DECLARE @source TABLE
    (bookingChannel    VARCHAR(100)
    , Cantidad_reservas INT
    , Denominacion      VARCHAR(100)
    );
    
    INSERT INTO @source
    VALUES      ('Booking.com', 120, '| 10 Dom 202 Dormitory'), ('Booking.com', 1880, ' 04 Dom 202 Dormitory	'), ('Booking.com', 130, '| 12 Dom 202 Dormitory'), ('Facebook.com', 120, '| 101 Dormitory		'), ('Facebook.com', 150, '120 Dom 201 Dormitory ');
    /* NOTA 3 */
    SELECT 	  destino.bookingChannel
    	, destino.cantidad
    	, destino.Denominacion
    FROM       
    ( /* NOTA 2 */
        SELECT ROW_NUMBER() OVER(PARTITION BY origen.bookingChannel
    		 ORDER BY Origen.BookingChannel
    			   , origen.Cantidad_Reservas DESC) AS fila
    	    , origen.bookingChannel
    	    , (origen.Cantidad_reservas) AS cantidad
    	    , Denominacion
        FROM       
        ( /* NOTA1 */
    	   SELECT [@source].bookingChannel
    		   , [@source].Cantidad_reservas
    		   , [@source].Denominacion
    	   FROM   
    		   @source
        ) AS origen
    ) AS destino
    WHERE  fila = 1;

    NOTA 1: 

    Aquí iría tu consulta, y yo he metido mi tabla en un conjunto cuyo resultado se llama origen. Esto es una tabla derivada.

    NOTA 2: 

    La salida de la tabla derivada origen, le aplico una función de ventana que numera las filas empezando por 1 y reiniciando el contador, por cada BookingChannel, ordenadas por la cantidad de reservas descendente, por tanto la fila 1 de todos los bookingchannel será la que tenga mayor cantidad. Si hay empates, en cantidad, como no puede haberlos para la misma denominación escogerá la denominación alfabéticamente menor.

    Esto me da otra tabla derivada que se llama Destino.

    NOTA 3:

    Recoge destino y filtra la fila 1

    (5 filas afectadas)
    bookingChannel       cantidad    Denominacion
    -------------------- ----------- -------------------------
    Booking.com          1880         04 Dom 202 Dormitory 
    Facebook.com         150         120 Dom 201 Dormitory
    (2 filas afectadas)

    Tablas derivadas

    https://javifer2.blogspot.com/search/label/Tabla%20derivada

    Row_Number

    https://javifer2.blogspot.com/search/label/row_number

    Espero te ayude

    viernes, 24 de mayo de 2019 19:13

Todas las respuestas

  • Hola Fabian166:

    Existen multitud de caminos para realizar eso. Yo te voy a intentar enseñar uno que te ayudará bastante (eso espero), porque lo puedes aplicar muchas veces.

    Cuando este el resultado te pondré enlaces a diferentes conceptos que son importantes y te ayudarán a realizar esto.

    Empiezo: Lo primero es tu escenario y yo no voy a meterme en tú consulta, voy a suponer que es muy buena y la voy a meter su contenido en una variable tipo tabla para poder trabajar. (esta parte tu no la haces)

    DECLARE @source TABLE
    (bookingChannel    VARCHAR(100)
    , Cantidad_reservas INT
    , Denominacion      VARCHAR(100)
    );
    
    INSERT INTO @source
    VALUES      ('Booking.com', 120, '| 10 Dom 202 Dormitory'), ('Booking.com', 1880, ' 04 Dom 202 Dormitory	'), ('Booking.com', 130, '| 12 Dom 202 Dormitory'), ('Facebook.com', 120, '| 101 Dormitory		'), ('Facebook.com', 150, '120 Dom 201 Dormitory ');
    /* NOTA 3 */
    SELECT 	  destino.bookingChannel
    	, destino.cantidad
    	, destino.Denominacion
    FROM       
    ( /* NOTA 2 */
        SELECT ROW_NUMBER() OVER(PARTITION BY origen.bookingChannel
    		 ORDER BY Origen.BookingChannel
    			   , origen.Cantidad_Reservas DESC) AS fila
    	    , origen.bookingChannel
    	    , (origen.Cantidad_reservas) AS cantidad
    	    , Denominacion
        FROM       
        ( /* NOTA1 */
    	   SELECT [@source].bookingChannel
    		   , [@source].Cantidad_reservas
    		   , [@source].Denominacion
    	   FROM   
    		   @source
        ) AS origen
    ) AS destino
    WHERE  fila = 1;

    NOTA 1: 

    Aquí iría tu consulta, y yo he metido mi tabla en un conjunto cuyo resultado se llama origen. Esto es una tabla derivada.

    NOTA 2: 

    La salida de la tabla derivada origen, le aplico una función de ventana que numera las filas empezando por 1 y reiniciando el contador, por cada BookingChannel, ordenadas por la cantidad de reservas descendente, por tanto la fila 1 de todos los bookingchannel será la que tenga mayor cantidad. Si hay empates, en cantidad, como no puede haberlos para la misma denominación escogerá la denominación alfabéticamente menor.

    Esto me da otra tabla derivada que se llama Destino.

    NOTA 3:

    Recoge destino y filtra la fila 1

    (5 filas afectadas)
    bookingChannel       cantidad    Denominacion
    -------------------- ----------- -------------------------
    Booking.com          1880         04 Dom 202 Dormitory 
    Facebook.com         150         120 Dom 201 Dormitory
    (2 filas afectadas)

    Tablas derivadas

    https://javifer2.blogspot.com/search/label/Tabla%20derivada

    Row_Number

    https://javifer2.blogspot.com/search/label/row_number

    Espero te ayude

    viernes, 24 de mayo de 2019 19:13
  • Gracias por la respuesta , me funciono.

    viernes, 24 de mayo de 2019 19:44