none
Cumple o No con la Condición de Contratación RRS feed

  • Pregunta

  • Hola !! 

    Quisiera que me ayudaran con este problema que no me sale. Por favor

    SQL SERVER 2008 R2 y C# 

    Tabla de contrataciones

    icod  Pers   fecha_contrato_inic       feche_contrato_fin

    16 13  2013-10-01 00:00:00    2013-12-31 00:00:00
    17 13 2014-01-01 00:00:00   2014-03-31 00:00:00
    18 13 2014-04-01 00:00:00   2014-09-30 00:00:00
    19 13 2014-10-01 00:00:00   2015-03-30 00:00:00
    20 13 2015-03-31 00:00:00   2015-06-30 00:00:00
    21 13 2015-07-01 00:00:00   2015-12-31 00:00:00
    22 13 2016-01-01 00:00:00   2016-06-30 00:00:00
    23 13 2016-07-01 00:00:00   2016-12-31 00:00:00
    24 13 2016-11-02 00:00:00   2017-03-02 00:00:00
    25 13 2017-03-03 00:00:00   2017-08-02 00:00:00

    Tabla Personal 

    13  Pepe Rojas  Contabilidad

    Si cumple con la condición  se pondrá en un campo 1 y si no cumple 0

    13  Pepe Rojas  Contabilidad   1/0

    la Condición sera:

    -Si esta dentro de un mes asignado que pude ser cualquier mes mandando como numero 6=Junio.  Ejemplo(01-06-2017 hasta

    30-06-2017) Basado el las Fecha de Inicio y Fecha de fin de 

    contrato, Si se encuentra los 30 días de Julio registrado si cumple con la condición.Gracias 


    jueves, 29 de junio de 2017 22:38

Respuestas

  • No bastará con establecer únicamente el mes, debes de establecer también el año.

    DECLARE @Mes int = 6;
    DECLARE @Año int = 2016;
    
    DECLARE @Fecha date = DATEADD(MONTH, @Mes - 1, DATEADD(YEAR, @Año - 1900, 0));
    
    SELECT
        p.idPers, p.Nombre, p.Area,
        CONVERT(bit, ISNULL(c.idcod, 0)) AS Estado
    FROM
        @Personal p
        LEFT JOIN @contrataciones c ON p.idPers = c.idPers
    	   AND c.fecha_contrato_inic <= @Fecha
    	   AND c.fecha_contrato_fin >= DATEADD(DAY, -1, DATEADD(MONTH, 1, @Fecha))
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 29 de junio de 2017 23:15

Todas las respuestas

  • No bastará con establecer únicamente el mes, debes de establecer también el año.

    DECLARE @Mes int = 6;
    DECLARE @Año int = 2016;
    
    DECLARE @Fecha date = DATEADD(MONTH, @Mes - 1, DATEADD(YEAR, @Año - 1900, 0));
    
    SELECT
        p.idPers, p.Nombre, p.Area,
        CONVERT(bit, ISNULL(c.idcod, 0)) AS Estado
    FROM
        @Personal p
        LEFT JOIN @contrataciones c ON p.idPers = c.idPers
    	   AND c.fecha_contrato_inic <= @Fecha
    	   AND c.fecha_contrato_fin >= DATEADD(DAY, -1, DATEADD(MONTH, 1, @Fecha))
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 29 de junio de 2017 23:15
  • Gracias por Responder , Hasta cierto punto esta bien pero que pasa 

    si en dos registro tengo tengo una contratacion de mes de Junio .

    Como por ejemplo :

    26 13 2017-04-03   2017-06-12  (Contrato)

    27 13 2017-06-13   2017-08-02 (Renueva su contrato)

    Se me olvido decir ese detalle . Gracias 

    jueves, 29 de junio de 2017 23:46
  • Dinos tú que es lo que esperarías que suceda en ese caso
    viernes, 30 de junio de 2017 0:40
  • Igual como la Primera Solución   ponerlo en el mismo ESTADO (1/0) o crear otro ESTADO
    viernes, 30 de junio de 2017 1:21