Publiqué una pregunta similar anteriormente aquí: Mostrar valores LISTAGG en una celda según el valor de otra columna .
En esa pregunta, estaba usando ACTUALIZAR para almacenar una lista delimitada por comas.
Obtuve una solución para eso, pero gracias a los colaboradores me di cuenta de que esta no es la mejor manera de hacerlo.
Estoy usando Oracle APEX y necesito mostrar estos datos en una tabla.
ID Schedule Days
001 Weekend Saturday, Sunday
Tengo 3 mesas para trabajar. Son, para simplificar, DAYS, SCHEDULES y DAY_SCHEDULES.
DAYS table
Day_ID - PK
Day_Order
Day_Name
Schedule (I added this column myself, the others were already provided)
SCHEDULES table
Schedule_ID - PK
Schedule (only two possible values: 'Weekend' or 'Weekday')
Days
Several other columns but not relevant
DAY_SCHEDULES table
Day_schedules_id - PK
Schedule_ID - FK
Day_ID - FK
He intentado varias formas de hacer que la columna Días muestre una lista de los días correspondientes, pero ninguna parece funcionar. Mis principales intentos han sido jugar con las declaraciones SELECT / CASE, pero aún no mostrará nada incluso cuando la sintaxis sea correcta.
No puedo hacer un FK entre las dos tablas ya que ninguna de las columnas de Horarios es única.
No estoy seguro de qué probar a continuación, por lo que se agradece cualquier ayuda o consejo.
Gracias,
Hassan
Creo que esto es lo que está tratando de lograr (no necesita la DAYS
columna en la tabla de programación, ya que puede calcularla a partir de la tabla de días):
Configuración del esquema de Oracle 11g R2 :
CREATE TABLE DAYS ( Day_ID, Day_Order, Day_Name, Schedule ) AS
SELECT LEVEL,
LEVEL - 1,
TO_CHAR(
TRUNC( SYSDATE, 'IW' ) + LEVEL - 1,
'FMDay',
'NLS_LANGUAGE=ENGLISH'
),
CASE
WHEN LEVEL <= 5
THEN 'Weekday'
ELSE 'Weekend'
END
FROM DUAL
CONNECT BY LEVEL <= 7;
CREATE TABLE SCHEDULES ( Schedule_ID, Schedule, Other ) AS
SELECT 1, 'Weekend', 'ABC' FROM DUAL UNION ALL
SELECT 2, 'Weekday', 'DEF' FROM DUAL;
Consulta 1 :
SELECT s.*,
d.days
FROM schedules s
INNER JOIN
( SELECT schedule,
LISTAGG( day_name, ', ' )
WITHIN GROUP ( ORDER BY day_order ) AS days
FROM days
GROUP BY schedule ) d
ON ( s.schedule = d.schedule )
| SCHEDULE_ID | SCHEDULE | OTHER | DAYS |
|-------------|----------|-------|----------------------------------------------|
| 2 | Weekday | DEF | Monday, Tuesday, Wednesday, Thursday, Friday |
| 1 | Weekend | ABC | Saturday, Sunday |
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras