Sql oracle中的条件视图

Sql oracle中的条件视图,sql,oracle,Sql,Oracle,下面是我需要从中创建条件化视图的表 我从不同的桌子上得到了一面旗帜。因此,基于标志值,即如果标志=1,则需要显示表中的实际列值,如果标志=0,则将所有列值显示为空值。 我知道我们可以使用CASE语句处理它,但在这里,5月份的CASE列计数非常大,因此需要以更好的方式处理。您可以尝试使用CASE表达式和REGEXP\u REPLACE来屏蔽值列: 选择ID, 如果flag=1,则值ELSE REGEXP_REPLACE(值“.”、“*”)以值结尾 从你的桌子上; 您可以使用左连接: select

下面是我需要从中创建条件化视图的表

我从不同的桌子上得到了一面旗帜。因此,基于标志值,即如果标志=1,则需要显示表中的实际列值,如果标志=0,则将所有列值显示为空值。
我知道我们可以使用CASE语句处理它,但在这里,5月份的CASE列计数非常大,因此需要以更好的方式处理。

您可以尝试使用
CASE
表达式和
REGEXP\u REPLACE
来屏蔽值列:

选择ID,
如果flag=1,则值ELSE REGEXP_REPLACE(值“.”、“*”)以值结尾
从你的桌子上;

您可以使用
左连接

select t.*
from (select 1 as flag from dual) x left join
     t
     on x.flag = :flag;
如果
:flag=1
,则将显示所有列。如果
:flag
是其他值,则所有值都将为
NULL

如果您真的想显示ID,它会稍微复杂一些:

select i.*, t.*
from (select 1 as flag from dual) x left join
     (select id, . . .  -- columns you want to keep
      from t
     ) i left join
     t
     on x.flag = :flag and t.id = i.id;

您可能需要列出带有
NULL
值的列。

谢谢。。。根据上面的解决方案,我需要为表中的每一列添加CASE,这是一项非常长的任务,因为我在表中有100多个列。那么,我们可以在完整的表级别上处理它吗?@New_User在这种情况下,您可能需要研究如何在视图层中处理屏蔽(例如PHP、Java、Python等)。否则,基本上每个列都需要一个单独的大小写表达式。是否可以使用该表达式?该标志来自何处?不能将参数传递给视图