我有3个选择
SELECT
mam.fecha fecha
, u.COD_USUARIO usuario
, u.NOMBREAPELLIDOS nombre
, ROW_NUMBER() OVER (PARTITION BY u.cod_usuario ORDER BY mam.fecha ASC) AS rn_asc
, ROW_NUMBER() OVER (PARTITION BY u.cod_usuario ORDER BY mam.fecha DESC) AS rn_desc
,mam.accion accion
,u.ID_CENTRO_GESTION centrogestion
FROM r_mod_asignar_material mam
INNER JOIN r_usuarios u ON mam.cod_usuario = u.cod_usuario
where mam.ACCION = 'A'
and trunc(mam.fecha) = to_date('13/09/2018','dd/mm/yyyy')
and mam.cod_usuario = '9717703'
and u.id_centro_gestion = '3'
order by u.cod_usuario
第二,更改位置相同
SELECT
mam.fecha fecha
, u.COD_USUARIO usuario
, u.NOMBREAPELLIDOS nombre
, ROW_NUMBER() OVER (PARTITION BY u.cod_usuario ORDER BY mam.fecha ASC) AS rn_asc
, ROW_NUMBER() OVER (PARTITION BY u.cod_usuario ORDER BY mam.fecha DESC) AS rn_desc
,mam.accion accion
,u.ID_CENTRO_GESTION centrogestion
FROM r_mod_asignar_material mam
INNER JOIN r_usuarios u ON mam.cod_usuario = u.cod_usuario
where mam.ACCION = 'D'
and trunc(mam.fecha) = to_date('13/09/2018','dd/mm/yyyy')
and mam.cod_usuario = '9717703'
and u.id_centro_gestion = '3'
order by u.cod_usuario
第三个
SELECT COUNT (*) numeroincidencias, ri.cod_usuario usuario
FROM r_incidencias ri
WHERE TRUNC (ri.fecha_inc) = TO_DATE ('13/09/2018', 'dd/mm/yyyy')
and ri.cod_usuario = '9717703'
GROUP BY ri.cod_usuario
我想通过cod_usuario链接这些选择。第一次,第二次或第三次选择中不能有行。
如何进行这些选择的外部联接?
答案 0 :(得分:1)
让每个选择的对象都使用一个公共表表达式,然后将它们全部外部连接在一起:
WITH cte1 AS (SELECT mam.fecha AS fecha,
u.COD_USUARIO AS usuario,
u.NOMBREAPELLIDOS AS nombre,
ROW_NUMBER() OVER (PARTITION BY u.cod_usuario
ORDER BY mam.fecha ASC) AS rn_asc,
ROW_NUMBER() OVER (PARTITION BY u.cod_usuario
ORDER BY mam.fecha DESC) AS rn_desc,
mam.accion AS accion,
u.ID_CENTRO_GESTION AS centrogestion
FROM r_mod_asignar_material mam
INNER JOIN r_usuarios u
ON mam.cod_usuario = u.cod_usuario
where mam.ACCION = 'A' and
trunc(mam.fecha) = to_date('13/09/2018','dd/mm/yyyy') AND
mam.cod_usuario = '9717703' AND
u.id_centro_gestion = '3'
order by u.cod_usuario),
cte2 AS (SELECT mam.fecha AS fecha,
u.COD_USUARIO AS usuario,
u.NOMBREAPELLIDOS AS nombre,
ROW_NUMBER() OVER (PARTITION BY u.cod_usuario
ORDER BY mam.fecha ASC) AS rn_asc,
ROW_NUMBER() OVER (PARTITION BY u.cod_usuario
ORDER BY mam.fecha DESC) AS rn_desc,
mam.accion AS accion
u.ID_CENTRO_GESTION AS centrogestion
FROM r_mod_asignar_material mam
INNER JOIN r_usuarios u
ON mam.cod_usuario = u.cod_usuario
where mam.ACCION = 'D' and
trunc(mam.fecha) = to_date('13/09/2018','dd/mm/yyyy') AND
mam.cod_usuario = '9717703' AND
u.id_centro_gestion = '3'
order by u.cod_usuario),
cte3 AS (SELECT COUNT (*) numeroincidencias,
ri.cod_usuario usuario
FROM r_incidencias ri
WHERE TRUNC (ri.fecha_inc) = TO_DATE ('13/09/2018', 'dd/mm/yyyy') AND
ri.cod_usuario = '9717703'
GROUP BY ri.cod_usuario)
SELECT *
FROM cte1
FULL OUTER JOIN cte2
ON cte2.cod_usuario = cte1.cod_usuario
FULL OUTER JOIN cte3
ON cte3.cod_usuario = COALESCE(cte1.cod_usuario, cte2.cod_usuario)