У меня есть необходимость разделить одну запись на 2, когда они соответствуют определенным критериям, и мне сложно объединить их вместе, разделив их. У меня есть эта таблица:Oracle Nesting With Clauses
Для встреч, в день, мне нужно разделить их на 2 сессии, один утром и один во второй половине дня. В этом примере мне нужно разделить тест 2 на 2 сеанса AM и PM.
Я использовал это заявление, и это служит мне хорошо:
WITH DATA
AS
(SELECT
CASE
WHEN level=1 THEN 'AM'
WHEN LEVEL=2 THEN 'PM'
END "Session"
FROM dual CONNECT BY level<3)
SELECT "Meeting","From","EndTime","StartTime","Session"
FROM "TEST", DATA
WHERE ("StartTime" < 12 AND "StartTime">=8) AND ("EndTime" > 12 AND "EndTime" <= 17)
Однако, когда я попытался объединить другую встречу, что вторая половина дня, я получил ошибку ниже:
ORA-32034: unsupported use of WITH clause
32034. 00000 - "unsupported use of WITH clause"
*Cause: Inproper use of WITH clause because one of the following two reasons
1. nesting of WITH clause within WITH clause not supported yet
2. For a set query, WITH clause can't be specified for a branch.
3. WITH clause can't sepecified within parentheses.
*Action: correct query and retry
Error at Line: 56 Column: 1
Это заявление SQL я использовал:
SELECT *
FROM
(
SELECT "Meeting","From","EndTime","StartTime" ,
CASE
WHEN "StartTime" >= 8 AND "EndTime" <= 12 THEN 'AM'
WHEN "StartTime" >= 12 AND "EndTime" <= 17 THEN 'PM'
ELSE 'UNKNOWN'
END "Session"
FROM "TEST"
WHERE ("StartTime" >= 8 AND "EndTime" <= 12)
OR
("StartTime" >= 12 AND "EndTime" <= 17)
) HalfDay
UNION ALL
(
WITH DATA
AS
(SELECT
CASE
WHEN level=1 THEN 'AM'
WHEN LEVEL=2 THEN 'PM'
END "Session"
FROM dual CONNECT BY level<3)
SELECT "Meeting","From","EndTime","StartTime","Session"
FROM "TEST", DATA
WHERE ("StartTime" < 12 AND "StartTime">=8) AND ("EndTime" > 12 AND "EndTime" <= 17)
) FullDay
Как исправить это? Приложите сценарий для создания таблицы и связанных с ней данных.
CREATE TABLE "TEST"
( "Meeting" VARCHAR2(20 BYTE),
"From" DATE,
"StartTime" NUMBER,
"EndTime" NUMBER
) ;
Insert into TEST ("Meeting","From","StartTime","EndTime") values ('Test 1',to_date('06-JUL-15','DD-MON-RR'),12,17);
Insert into TEST ("Meeting","From","StartTime","EndTime") values ('Test 2',to_date('12-DEC-15','DD-MON-RR'),8,17);
Моя цель получает этот выход
наряду с этим в 1 зрения
Got команда SQL не должным образом закончилось ... Даже если он работал, перемещаясь с помощью к началу изменяет семантику SQL ,Я только хотел добавить AM и PM в записи, имеющие 2 сеанса. – user1205746
Это не изменяет семантику SQL. Вы можете видеть 'DATA' как представление, используемое в другой части запроса, оно может быть даже фактическим видом вне вашего запроса. Кроме того, вы можете пропустить всю часть 'with' и поместить подзаголовок в место, где вы теперь используете' DATA'. – GolezTrol
Работает вся часть sql части, содержащая инструкцию using! Спасибо! – user1205746