none
Consulta Sql

    Question

  • Buenas, necesito hacer una consulta y no he podido,
    tengo una BD llamada Hotel
    y dos tablas, Habitacion y Servicios
    la tabla Habitacion tiene los siguientes campos
    Id_hab
    Clase
    Valor
    Vlr_adicional
    detalle


    la tabla servicio tiene los sgtes campos
    Id_ser
    Id_hab
    Hora_entrada
    Hora_salida


    Debo listar el total que debe pagar un cliente por el servicio.
    el campo valor hace referencia al valor por 3 horas.
    Friday, October 29, 2010 12:50 AM

Answers

  • Primero, creo que deberías manejar los datos de Servicios con los campos hora_entrada y hora_salida como DATETIME, esto te ayudaría a tener mas control en las consultas, despues de arreglar esto, podrias consutlar utilizando esto:

     

    Arme lo siguiente:


    Cree las tablas que indicas con la siguiente caracteristica:

    create
     table
     Habitacion
    (
     id_hab int
    ,
     clase varchaR
    (10),
     VALOR MONEY
    ,
     VLr_adicional money
    ,
     detalle varchar
    (100)
    )
    create
     table
     Servicios
    (
     id_serv int
    ,
     id_hab int
    ,
     hora_entrada DATETIME
    ,
     hora_salida DATETIME
    
    )
    


    Inserte los siguientes datos:

    En Habitación:

    1    A    100.00    0.00    Detalle
    2    B    50.00    0.00    Detalle 2

    En Servicios:

    1    1    2010-10-28 15:35:50.913    2010-10-28 19:00:50.913
    1    2    2010-10-28 20:00:54.413    2010-10-28 21:00:54.413

     

     

    Select
     (DATEDIFF
    (HOUR
    , S.hora_entrada, S.hora_salida)) * H.VALOR
    From
     Habitacion H
    INNER
     JOIN
     Servicios S
    ON
     H.id_hab = S.id_serv
    

     

     

    La consulta me retorna:

    400 para el primer cliente y 100 para el segundo cliente.

     

    Espero que te sirva.


    Willy Taveras.-

    Siguiendo la respuesta anterior:

     

    Entendiendo mejor la parte donde comentas "el campo valor hace referencia al valor por 3 horas " entonces he puesto que el valor por cada 3 horas es de 400, lo que significa que si un Cliente tiene una duración de 3 horas exactas, el precio a pagar es 400, en caso de que se pase o sea diferente de esta cantidad, el valor a pagar sería igual a la cantidad de horas / cantidad de horas pautadas para el valor (en nuestro caso 3) esto multiplicando el valor y tendriamos el resultado de lo que debe pagar el Cliente.

     

    Si este es tu caso y responde tu pregunta, te recomiendo que pongas un parametro en alguna tabla donde indiques la cantidad de horas y el percio y pases eso por un ID a la tabla de Habitación o Servicios cuando el Cliente eliga un tipo de servicio, esto es por si la aplicación crece o se desea cambiar este dato.

     

    Código:

     

    Select 
    Case When (DATEDIFF(HOUR, S.hora_entrada, S.hora_salida)) = 3
    Then H.VALOR 
    Else CAST(CAST(DATEDIFF(HOUR, S.hora_entrada, S.hora_salida) AS Numeric(16, 2)) / 3 * H.VALOR AS Numeric(18,2)) End as Valor
    From Habitacion H
    INNER JOIN Servicios S
    ON H.id_hab = S.id_serv
    

     


    Willy Taveras.-
    Friday, October 29, 2010 3:16 AM

All replies

  • Primero, creo que deberías manejar los datos de Servicios con los campos hora_entrada y hora_salida como DATETIME, esto te ayudaría a tener mas control en las consultas, despues de arreglar esto, podrias consutlar utilizando esto:

     

    Arme lo siguiente:


    Cree las tablas que indicas con la siguiente caracteristica:

    create table Habitacion
    (
     id_hab int,
     clase varchaR(10),
     VALOR MONEY,
     VLr_adicional money,
     detalle varchar(100)
    )
    create table Servicios
    (
     id_serv int,
     id_hab int,
     hora_entrada DATETIME,
     hora_salida DATETIME
    )
    


    Inserte los siguientes datos:

    En Habitación:

    1    A    100.00    0.00    Detalle
    2    B    50.00    0.00    Detalle 2

    En Servicios:

    1    1    2010-10-28 15:35:50.913    2010-10-28 19:00:50.913
    1    2    2010-10-28 20:00:54.413    2010-10-28 21:00:54.413

     

    Select (DATEDIFF(HOUR, S.hora_entrada, S.hora_salida)) * H.VALOR
    From Habitacion H
    INNER JOIN Servicios S
    ON H.id_hab = S.id_serv
    

     

    La consulta me retorna:

    400 para el primer cliente y 100 para el segundo cliente.

     

    Espero que te sirva.


    Willy Taveras.-
    Friday, October 29, 2010 2:43 AM
  • Primero, creo que deberías manejar los datos de Servicios con los campos hora_entrada y hora_salida como DATETIME, esto te ayudaría a tener mas control en las consultas, despues de arreglar esto, podrias consutlar utilizando esto:

     

    Arme lo siguiente:


    Cree las tablas que indicas con la siguiente caracteristica:

    create
     table
     Habitacion
    (
     id_hab int
    ,
     clase varchaR
    (10),
     VALOR MONEY
    ,
     VLr_adicional money
    ,
     detalle varchar
    (100)
    )
    create
     table
     Servicios
    (
     id_serv int
    ,
     id_hab int
    ,
     hora_entrada DATETIME
    ,
     hora_salida DATETIME
    
    )
    


    Inserte los siguientes datos:

    En Habitación:

    1    A    100.00    0.00    Detalle
    2    B    50.00    0.00    Detalle 2

    En Servicios:

    1    1    2010-10-28 15:35:50.913    2010-10-28 19:00:50.913
    1    2    2010-10-28 20:00:54.413    2010-10-28 21:00:54.413

     

     

    Select
     (DATEDIFF
    (HOUR
    , S.hora_entrada, S.hora_salida)) * H.VALOR
    From
     Habitacion H
    INNER
     JOIN
     Servicios S
    ON
     H.id_hab = S.id_serv
    

     

     

    La consulta me retorna:

    400 para el primer cliente y 100 para el segundo cliente.

     

    Espero que te sirva.


    Willy Taveras.-

    Siguiendo la respuesta anterior:

     

    Entendiendo mejor la parte donde comentas "el campo valor hace referencia al valor por 3 horas " entonces he puesto que el valor por cada 3 horas es de 400, lo que significa que si un Cliente tiene una duración de 3 horas exactas, el precio a pagar es 400, en caso de que se pase o sea diferente de esta cantidad, el valor a pagar sería igual a la cantidad de horas / cantidad de horas pautadas para el valor (en nuestro caso 3) esto multiplicando el valor y tendriamos el resultado de lo que debe pagar el Cliente.

     

    Si este es tu caso y responde tu pregunta, te recomiendo que pongas un parametro en alguna tabla donde indiques la cantidad de horas y el percio y pases eso por un ID a la tabla de Habitación o Servicios cuando el Cliente eliga un tipo de servicio, esto es por si la aplicación crece o se desea cambiar este dato.

     

    Código:

     

    Select 
    Case When (DATEDIFF(HOUR, S.hora_entrada, S.hora_salida)) = 3
    Then H.VALOR 
    Else CAST(CAST(DATEDIFF(HOUR, S.hora_entrada, S.hora_salida) AS Numeric(16, 2)) / 3 * H.VALOR AS Numeric(18,2)) End as Valor
    From Habitacion H
    INNER JOIN Servicios S
    ON H.id_hab = S.id_serv
    

     


    Willy Taveras.-
    Friday, October 29, 2010 3:16 AM