Suponga que tiene una tabla de la siguiente manera:¿Existe una alternativa al operador MULTISET que evite las subconsultas?
CREATE TABLE EMPLOYEE_SALES
(
EMPLOYEE_ID NUMBER,
PRODUCT_ID NUMBER,
SALE_AMOUNT NUMBER
);
Y supongamos que está poblada de la siguiente manera:
+-------------+------------+-------------+ | EMPLOYEE_ID | PRODUCT_ID | SALE_AMOUNT | +-------------+------------+-------------+ | 1 | 100 | 1.05 | | 1 | 200 | 45.67 | | 2 | 100 | 3.25 | | 2 | 200 | 34.29 | +-------------+------------+-------------+
Ahora, supongamos que crea un tipo personalizado denominado SALE_TYPE
que representa una tupla (PRODUCT_ID, SALE_AMOUNT)
:
CREATE TYPE SALE_TYPE IS OBJECT
(
PRODUCT_ID NUMBER,
SALE_AMOUNT NUMBER
);
Y supongamos que también creo un tipo personalizado llamado SALES_TYPE
que repr esents un TABLE
de SALE_TYPE
:
CREATE TYPE SALES_TYPE IS TABLE OF SALE_TYPE;
Quiero consultar el grupo EMPLOYEE_SALES
tabla EMPLOYEE_ID
. Para cada EMPLOYEE_ID
, deseo crear un SALES_TYPE
que contenga las ventas de ese empleado. Según la documentación, me gustaría hacer algo como esto:
SELECT
EMPLOYEE_ID,
CAST
(
MULTISET
(
SELECT
PRODUCT_ID,
SALE_AMOUNT
FROM
EMPLOYEE_SALES inner_employee_sales
WHERE
inner_employee_sales.employee_id = employee_sales.employee_id
) AS SALES_TYPE
) AS SALES
FROM
EMPLOYEE_SALES
GROUP BY
EMPLOYEE_ID
espero que esta consulta para producir algo como esto:
+-------------+------------------------------+ | EMPLOYEE_ID | SALES | +-------------+------------------------------+ | 1 | +------------+-------------+ | | | | PRODUCT_ID | SALE_AMOUNT | | | | +------------+-------------+ | | | | 100 | 1.05 | | | | | 200 | 45.67 | | | | +------------+-------------+ | +-------------+------------------------------+ | 2 | +------------+-------------+ | | | | PRODUCT_ID | SALE_AMOUNT | | | | +------------+-------------+ | | | | 100 | 3.25 | | | | | 200 | 34.29 | | | | +------------+-------------+ | +-------------+------------------------------+
¿Hay una manera de lograr los mismos resultados sin emitir un sub consulta (la consulta real en la que estoy trabajando es mucho más complicada que este ejemplo artificial)? Por ejemplo, ¿hay algo como esto:
SELECT
EMPLOYEE_ID,
CAST
(
COLLECT_ALL_RECORDS_WITHIN_THE_CURRENT_GROUP(
PRODUCT_ID,
SALE_AMOUNT
)
AS SALES_TYPE
) AS SALES
FROM
EMPLOYEE_SALES
GROUP BY
EMPLOYEE_ID
+1: ¡Guau, fue tan simple! –