none
Ayuda con un subconsulta RRS feed

  • Pregunta

  • resulta que tengo la siguiente problemática y gracias por la ayuda brindada.

    SELECT 
            T0.NRO_PROPIEDAD "NRO PROPIEDAD",
            T1.DESC_TIPO_PROPIEDAD "TIPO PROPIEDAD",
            T0.SUPERFICIE "SUPERFICIE EN MT2",
            TO_CHAR(T0.VALOR_ARRIENDO, '$99G999G999') "VALOR ARRIENDO",
             (SELECT 
                    CASE 
                        WHEN T3.SUPERFICIE BETWEEN 1 AND 20 THEN T3.VALOR_ARRIENDO + (T3.VALOR_ARRIENDO * 0.10)
                        WHEN T3.SUPERFICIE BETWEEN 21 AND 30 THEN T3.VALOR_ARRIENDO + (T3.VALOR_ARRIENDO * 0.15)                    
                        WHEN T3.SUPERFICIE BETWEEN 31 AND 50 THEN T3.VALOR_ARRIENDO + (T3.VALOR_ARRIENDO * 0.20)
                        WHEN T3.SUPERFICIE BETWEEN 51 AND 70 THEN T3.VALOR_ARRIENDO + (T3.VALOR_ARRIENDO * 0.25)                                        
                        WHEN T3.SUPERFICIE BETWEEN 71 AND 100 THEN T3.VALOR_ARRIENDO + (T3.VALOR_ARRIENDO * 0.30)
                        WHEN T3.SUPERFICIE BETWEEN 101 AND 300 THEN T3.VALOR_ARRIENDO + (T3.VALOR_ARRIENDO * 0.35)
                    END 
               FROM 
                    PROPIEDAD T3
               WHERE  
                    
                  TO_CHAR(SYSDATE , 'YYYY') =  TO_CHAR(SYSDATE + NUMTOYMINTERVAL(1,'YEAR'), 'YYYY')) "VALOR ARRIENDO NUEVO"                        
    FROM
            PROPIEDAD T0
    JOIN    TIPO_PROPIEDAD T1 ON T0.ID_TIPO_PROPIEDAD = T1.ID_TIPO_PROPIEDAD
    
    ORDER BY 2 ASC, 4 DESC;

    Al ejecutar dicha sentencia

    lo que trato de generar en la subconsulta que me retorne los valor arriendo nuevo según el case.

    por ejemplo si ejecuto hoy la consulta el sysdate tiene que sumarle 1 al año osea estamos a 2017 y tiene q ser el 2018

    Saludos 

    LatinWater!


    • Editado LatinWater lunes, 16 de octubre de 2017 19:07
    lunes, 16 de octubre de 2017 14:54

Respuestas

  • yo no conozco tu estrucutra de datos, no puedo saber eso. supongo que sera algo así

    WHERE year(campoquetienelafecha ) = añoquevienecalculado

    poner el year no es eficiente peor vamos, primero resuelve el problema y luego ya hablamos de eficiencias


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marcado como respuesta LatinWater martes, 17 de octubre de 2017 18:17
    martes, 17 de octubre de 2017 14:30
    Moderador
  • gracias por la ayuda brindad lo resolvi de la siguiente manera

    SELECT 
            T0.NRO_PROPIEDAD "NRO PROPIEDAD",
            T1.DESC_TIPO_PROPIEDAD "TIPO PROPIEDAD",
            T0.SUPERFICIE "SUPERFICIE EN MT2",
            TO_CHAR(T0.VALOR_ARRIENDO, '$99G999G999') "VALOR ARRIENDO",
            TO_CHAR((((((SELECT T3.PORC_AUMENTO_ARRIENDO FROM PORC_AUMENTO_VALOR_ARRIENDO T3 
                 WHERE T0.SUPERFICIE BETWEEN T3.SUPERFICIE_INFERIOR  AND T3.SUPERFICIE_SUPERIOR AND 
                 T3.ANNO_PERIODO= TO_CHAR(SYSDATE,'YYYY') +1))/ 100 )+ 1) * T0.VALOR_ARRIENDO ), '$99G999G999') AS  "VALOR ARRIENDO NUEVO"        
    FROM
            PROPIEDAD T0
    JOIN    TIPO_PROPIEDAD T1 ON T0.ID_TIPO_PROPIEDAD = T1.ID_TIPO_PROPIEDAD
    ORDER BY 2 ASC, 4 DESC;

    • Marcado como respuesta LatinWater martes, 17 de octubre de 2017 18:17
    martes, 17 de octubre de 2017 18:17

Todas las respuestas

  • hola latinwater, 

    en tu where estas poniendo where false... por que sysdate no puede ser nunca =sysdate+loquesea

    lo que parece que te falla es que en tu izquierda tienes que poner el campo de la tabla propiedad que tenga esa fecha, y ten cuidado con las fechas y las fechas y horas, asegúrate que pones tipos de datos compatibles también.

    En cualquier caso esto es lo que está mal por que siempre dara "false"

              TO_CHAR(SYSDATE , 'YYYY') = TO_CHAR(SYSDATE + NUMTOYMINTERVAL(1,'YEAR'), 'YYYY')


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 17 de octubre de 2017 5:46
    Moderador
  • hola latinwater, 

    en tu where estas poniendo where false... por que sysdate no puede ser nunca =sysdate+loquesea

    lo que parece que te falla es que en tu izquierda tienes que poner el campo de la tabla propiedad que tenga esa fecha, y ten cuidado con las fechas y las fechas y horas, asegúrate que pones tipos de datos compatibles también.

    En cualquier caso esto es lo que está mal por que siempre dara "false"

              TO_CHAR(SYSDATE , 'YYYY') = TO_CHAR(SYSDATE + NUMTOYMINTERVAL(1,'YEAR'), 'YYYY')


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    en dicho caso como podria evaluar el where

    Saludos

    LatinWater!

    martes, 17 de octubre de 2017 13:15
  • yo no conozco tu estrucutra de datos, no puedo saber eso. supongo que sera algo así

    WHERE year(campoquetienelafecha ) = añoquevienecalculado

    poner el year no es eficiente peor vamos, primero resuelve el problema y luego ya hablamos de eficiencias


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Marcado como respuesta LatinWater martes, 17 de octubre de 2017 18:17
    martes, 17 de octubre de 2017 14:30
    Moderador
  • gracias por la ayuda brindad lo resolvi de la siguiente manera

    SELECT 
            T0.NRO_PROPIEDAD "NRO PROPIEDAD",
            T1.DESC_TIPO_PROPIEDAD "TIPO PROPIEDAD",
            T0.SUPERFICIE "SUPERFICIE EN MT2",
            TO_CHAR(T0.VALOR_ARRIENDO, '$99G999G999') "VALOR ARRIENDO",
            TO_CHAR((((((SELECT T3.PORC_AUMENTO_ARRIENDO FROM PORC_AUMENTO_VALOR_ARRIENDO T3 
                 WHERE T0.SUPERFICIE BETWEEN T3.SUPERFICIE_INFERIOR  AND T3.SUPERFICIE_SUPERIOR AND 
                 T3.ANNO_PERIODO= TO_CHAR(SYSDATE,'YYYY') +1))/ 100 )+ 1) * T0.VALOR_ARRIENDO ), '$99G999G999') AS  "VALOR ARRIENDO NUEVO"        
    FROM
            PROPIEDAD T0
    JOIN    TIPO_PROPIEDAD T1 ON T0.ID_TIPO_PROPIEDAD = T1.ID_TIPO_PROPIEDAD
    ORDER BY 2 ASC, 4 DESC;

    • Marcado como respuesta LatinWater martes, 17 de octubre de 2017 18:17
    martes, 17 de octubre de 2017 18:17