
Consultar periodos (min/max) y crear periodos intermedios
Publicado por Matias (1 intervención) el 24/11/2021 23:56:18
Hola, Necesito ayuda para unir las tablas DW_HEC_CATALOGO_CURSOS y DW_HEC_CATALOGO_CURSOS_HISTORICO, con el fin de tener una historia de los cambios de catalogo en la asignaturas, para ello se debe tener el periodo de inicio y fin de una asignatura, ejemplo el TAI303 que en la historica aparece desde el 201810 al 999999 y en la tabla actualizada DW_HEC_CATALOGO_CURSOS lo tiene desde el 202110 al 999999 lo que debe mostrar seria desde el 201810 al 202020 y del 202110 al 999999, ademas poblar las inetmedias con el mismo periodo fin que el primero, quedand;
TAI303 201810 - 202020
TAI303 201820 - 202020
TAI303 201910 - 202020
TAI303 201920 - 202020
TAI303 202010 - 202020
TAI303 202020 - 202020
TAI303 202110 - 999999
TAI303 202120 - 999999
TAI303 202210 - 999999
PERO CON TODAS LAS COLUMNAS DE LA TABLA DW_HEC_CATALOGO_CURSOS
ADJUNTO QUERY QUE CONSTRUIMOS PARA MOSTRAR EL PERIODO FIN QUE CORRESPONDE, POR SI SIRVE DE AYUDA.
SELECT A.*,
CASE WHEN MAX(B.CACU_PERIODO_INI) = A.CACU_PERIODO_INI
THEN '999999'
WHEN RIGHT(MAX(B.CACU_PERIODO_INI),2) = '10'
THEN CONCAT(LEFT(MAX(B.CACU_PERIODO_INI),4)-1,'20')
WHEN RIGHT(MAX(B.CACU_PERIODO_INI),2) = '20'
THEN CONCAT(LEFT(MAX(B.CACU_PERIODO_INI),4)-1,'10')
END ULT_PACA_COD
FROM
(
SELECT
ASIG_COD,
CACU_PERIODO_INI
from DW_HEC_CATALOGO_CURSOS_HISTORICO
--WHERE asig_cod = 'tai303'
UNION
SELECT
ASIG_COD,
CACU_PERIODO_INI
from DW_HEC_CATALOGO_CURSOS
--WHERE asig_cod = 'tai303'
)A
LEFT JOIN
(
SELECT
ASIG_COD,
CACU_PERIODO_INI
from DW_HEC_CATALOGO_CURSOS_HISTORICO
--WHERE asig_cod = 'tai303'
UNION
SELECT
ASIG_COD,
CACU_PERIODO_INI
from DW_HEC_CATALOGO_CURSOS
--WHERE asig_cod = 'tai303'
)B ON A.ASIG_COD = B.ASIG_COD
--WHERE A.asig_cod LIKE '%ARQ%'
GROUP BY A.ASIG_COD,A.CACU_PERIODO_INI
ORDER BY 1,2
TAI303 201810 - 202020
TAI303 201820 - 202020
TAI303 201910 - 202020
TAI303 201920 - 202020
TAI303 202010 - 202020
TAI303 202020 - 202020
TAI303 202110 - 999999
TAI303 202120 - 999999
TAI303 202210 - 999999
PERO CON TODAS LAS COLUMNAS DE LA TABLA DW_HEC_CATALOGO_CURSOS
ADJUNTO QUERY QUE CONSTRUIMOS PARA MOSTRAR EL PERIODO FIN QUE CORRESPONDE, POR SI SIRVE DE AYUDA.
SELECT A.*,
CASE WHEN MAX(B.CACU_PERIODO_INI) = A.CACU_PERIODO_INI
THEN '999999'
WHEN RIGHT(MAX(B.CACU_PERIODO_INI),2) = '10'
THEN CONCAT(LEFT(MAX(B.CACU_PERIODO_INI),4)-1,'20')
WHEN RIGHT(MAX(B.CACU_PERIODO_INI),2) = '20'
THEN CONCAT(LEFT(MAX(B.CACU_PERIODO_INI),4)-1,'10')
END ULT_PACA_COD
FROM
(
SELECT
ASIG_COD,
CACU_PERIODO_INI
from DW_HEC_CATALOGO_CURSOS_HISTORICO
--WHERE asig_cod = 'tai303'
UNION
SELECT
ASIG_COD,
CACU_PERIODO_INI
from DW_HEC_CATALOGO_CURSOS
--WHERE asig_cod = 'tai303'
)A
LEFT JOIN
(
SELECT
ASIG_COD,
CACU_PERIODO_INI
from DW_HEC_CATALOGO_CURSOS_HISTORICO
--WHERE asig_cod = 'tai303'
UNION
SELECT
ASIG_COD,
CACU_PERIODO_INI
from DW_HEC_CATALOGO_CURSOS
--WHERE asig_cod = 'tai303'
)B ON A.ASIG_COD = B.ASIG_COD
--WHERE A.asig_cod LIKE '%ARQ%'
GROUP BY A.ASIG_COD,A.CACU_PERIODO_INI
ORDER BY 1,2
Valora esta pregunta


0