Utilizando Oracle combine tres tablas en una con PIVOT
Tengo tres consultas de selección Oracle SQL que devuelve los siguientes resultados. La primera consulta de selección devuelve el resultado:
user_id | user_name |
---------|-----------|
1 | user_1 |
2 | user_2 |
3 | user_3 |
4 | user_4 |
a segunda consulta de selección devuelve el resultado:
exam_id | exam_name |
---------|-----------|
1 | exam_1 |
2 | exam_2 |
3 | exam_3 |
y la tercera consulta de selección devuelve el resultado:
exam_id | user_id | exam_date |
---------|---------|-----------|
1 | 1 | 2017 |
1 | 2 | 2018 |
1 | 3 | 2017 |
2 | 3 | 2018 |
Me gustaría combinar estas consultas para obtener el resultado:
user_id | user_name | exam_1 | exam_2 | exam_3 |
---------|-----------|--------|--------|--------|
1 | user_1 | 2017 | | |
2 | user_2 | 2018 | | |
3 | user_3 | 2017 | 2018 | |
4 | user_4 | | | |
¿Estaría agradecido por cualquier ayuda
Gracias @shrek por ayudarme aquí. Logré crear la variable para los valores de pivote pero no pude poner la variable en el pivote. Entonces obtuve ayuda para esoaqu y la versión final (para 11g) se ve así:
variable x REFCURSOR
DECLARE
exam_ids VARCHAR2(255);
BEGIN
SELECT
LISTAGG(''''
|| exam_id
|| ''' AS "'
|| exam_name
|| '"',',') WITHIN GROUP(
ORDER BY
exam_id ASC
)
INTO exam_ids
FROM
exam;
OPEN :x FOR 'SELECT
*
FROM
(
SELECT
u.user_id,
u.user_name,
e.exam_id,
eu.exam_date
FROM
users u
LEFT JOIN exam_user eu ON u.user_id = eu.user_id
LEFT JOIN exam e ON e.exam_id = eu.exam_id
ORDER BY
u.user_id
)
PIVOT ( MAX ( exam_date )
FOR exam_id
IN ( ' || EXAM_IDS || ' )
)
ORDER BY
1';
END;
/
print x
Así que funciona en SQL Developer y SQL * Plus. Pero no cuando se trata de usar una base de datos con un archivo PHP. Para eso necesitaba crear un procedimiento que luego se pudiera llamar desde un archivo PHP. @Aqu es un problema al intentar usar el código anterior del archivo PHP y la resolución.