Sql 创建具有多个大小写的视图,而不使用函数
您好,我必须使用oracle plsql创建视图,但我不知道如何在不使用创建功能的情况下完成此操作: 我收到了这个问题 您好我想创建使用查询的视图:Sql 创建具有多个大小写的视图,而不使用函数,sql,oracle,view,case,ddl,Sql,Oracle,View,Case,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
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
如果你能帮助我,请
谢谢澄清后,我将问题总结如下。我使用了您的查询作为基础,并在此基础上应用了
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;
检查它是否有效。澄清后,我将查询总结如下。我使用了您的查询作为基础,并在此基础上应用了
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;
检查它是否有效。请编辑问题,显示表定义、两个表的示例数据,以及我编辑的视图的预期输出和预期输出。据我所知,您有此查询,但它没有给出您想要的结果,您需要帮助。正确的?我会把查看主题作为第二优先权。我的查询会给我一个结果,我想用这个查询创建一个视图@Sujitmohanty30如何使用它query@MySqlDev788,但是您放置的查询提供了多行,但现在基于一行,您希望创建一个视图,该视图应应用您在案例条件中所述的逻辑,并为每个
homeid
提供一行。我说的对吗?请编辑问题,显示表定义,两个表的示例数据,以及我编辑的视图的预期输出和预期输出。据我所知,您有此查询,但它没有给出您想要的结果,您需要帮助。正确的?我会把查看主题作为第二优先权。我的查询会给我一个结果,我想用这个查询创建一个视图@Sujitmohanty30如何使用它query@MySqlDev788,但是您放置的查询提供了多行,但现在基于一行,您希望创建一个视图,该视图应应用您在案例条件中所述的逻辑,并为每个homeid
提供一行。我说的对吗?谢谢,我认为对于第一种情况,我需要设置MAX(isfourk)=1和MIN(isfourk)=1@MySqlDev788,我认为最基本的想法是玩min和max,我按照你上面提到的逻辑做了,但是你可以相应地改变anyway@MySqlDev788,它解决了您的问题还是答案没有用?谢谢,我认为对于第一种情况,我需要设置MAX(isfourk)=1和MIN(isfourk)=1@MySqlDev788,我认为最基本的想法是玩min和max,我按照你上面提到的逻辑做了,但是你可以相应地改变anyway@MySqlDev788,它解决了你的问题还是答案没有用?