Sql 创建具有多个大小写的视图,而不使用函数

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

您好,我必须使用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
如果你能帮助我,请


谢谢

澄清后,我将问题总结如下。我使用了您的查询作为基础,并在此基础上应用了
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,它解决了你的问题还是答案没有用?