#sql #oracle #view #case #ddl
#sql #Oracle #Вид #регистр #ddl
Вопрос:
Привет, я должен создать представление с помощью oracle plsql, но я не знаю, как я могу это сделать без функции создания: я получил этот запрос Привет, я хочу создать представление, которое использует запрос :
select unique tv.id , tv.homeid
case
when ht.hometype = 'A7DF56ZEF' then 0 --HOUSE
when ht.hometype = 'A7DF45ZEF' then 1 -- SMALLHOUSE
end as housetype ,
case
when tv.isfourk is null then 0
when tv.isfourk is not null then 1
end as isfourk
from hometable ht
join tvtable tv on ht.idtv = tv.id
where tv.homeid = 'KLL5FD5Z6'
Этот запрос возвращает мне результат следующим образом
tv.id tv.homeid housetype isfourk
A7844SD KLL5FD5Z6 1 0
A7944SD KLL5FD5Z6 1 0
A8044SD KLL5FD5Z6 1 0
Я хочу создать представление, используя этот результат запроса. этот запрос будет в представлении.
Представление будет иметь только одну строку по tv.homeid , как этот результат выполнения представления:
TV.homeid STATE
KLL5FD5Z6 (0 or 1 or 2 or 3 or 4 or 5)
УКАЖИТЕ условие регистра
IF ALL ROWS HAVE isfourk = 1 THEN 1
ELSE IF ALL ROWS WHERE housetype = 1 HAVE isfourk = 1 THEN 2
ELSE IF ONE OF THESE ROWS HAVE isfourk = 0 THEN 3
ELSE IF ONE OF THESE ROWS WHERE housetype = 1 HAVE isfourk = 0 THEN 4
ELSE 5
END as STATE
Если вы можете мне помочь, пожалуйста.
Спасибо
Комментарии:
1. Пожалуйста, отредактируйте вопрос, покажите определения таблиц, примеры данных для обеих таблиц и ожидаемый результат от представления
2. У меня есть редактирование и ожидаемый вывод
3. Как я понял, у вас есть этот запрос, но он не дает желаемого результата, и вам нужна помощь. Верно? Я бы сохранил тему просмотра в качестве второго prio.
4. Мой запрос дает мне результат, я хочу использовать этот запрос для создания представления @Sujitmohanty30 как использовался этот запрос
5. @MySqlDev788, но введенный вами запрос выдает несколько строк, но теперь на основе этого запроса вы хотите создать представление, которое должно применять логику, указанную в условии CASE, и предоставлять по одной строке на
homeid
. я прав?
Ответ №1:
Я обобщил запрос, как показано ниже, после разъяснений. Я использовал ваш запрос в качестве базового и, кроме того, применил case
логику для построения представления.
Один совет, используйте DISTINCT
вместо UNIQUE
CREATE OR REPLACE VIEW give_a_view_name
AS
SELECT homeid
, CASE
WHEN MAX(isfourk) = 1 THEN 1 --IF ALL ROWS HAVE isfourk = 1
WHEN MAX(isfourk) = 1 AND MAX(housetype) = 1 THEN 2 --IF ALL ROWS WHERE housetype = 1 HAVE isfourk = 1 THEN 2
WHEN MIN(isfourk) = 0 THEN 3 --IF ONE OF THESE ROWS HAVE isfourk = 0 THEN 3
WHEN MAX(housetype) = 1 AND MIN(isfourk) = 0 THEN 4 --IF ONE OF THESE ROWS WHERE housetype = 1 HAVE isfourk = 0 THEN 4
ELSE 5 --ELSE 5
END AS state
FROM (SELECT DISTINCT
tv.id
,tv.homeid
,CASE
WHEN ht.hometype = 'A7DF56ZEF' THEN 0 --HOUSE
WHEN ht.hometype = 'A7DF45ZEF' THEN 1 --SMALLHOUSE
END AS housetype
,CASE
WHEN tv.isfourk IS NULL THEN 0
WHEN tv.isfourk IS NOT NULL THEN 1
END AS isfourk
FROM hometable ht
JOIN tvtable tv ON ht.idtv = tv.id
WHERE tv.homeid = 'KLL5FD5Z6')
GROUP BY homeid;
Проверьте и посмотрите, работает ли это.
Комментарии:
1. Спасибо, я думаю, что для первого случая мне нужно установить MAX (isfourk) = 1 и MIN (isfourk) = 1
2. @MySqlDev788, я думаю, что основная идея состоит в том, чтобы играть с min и max, и я сделал так, как вы упомянули логику выше, но вы все равно можете изменить соответствующим образом
3. @MySqlDev788, это решило вашу проблему или ответ бесполезен?