Java 如何在Oracle中创建一个包含列的视图,该列的内容取决于相关实体的组合值?
在基于Oracle SQL数据库的Java应用程序中,我需要解决以下问题: 实体数据传递可以由任意数量的数据包组成。 数据包具有PacketStatus和外键datadeliveryid PacketStatus是具有以下值的枚举:Java 如何在Oracle中创建一个包含列的视图,该列的内容取决于相关实体的组合值?,java,sql,oracle,select,plsql,Java,Sql,Oracle,Select,Plsql,在基于Oracle SQL数据库的Java应用程序中,我需要解决以下问题: 实体数据传递可以由任意数量的数据包组成。 数据包具有PacketStatus和外键datadeliveryid PacketStatus是具有以下值的枚举: 0, processed 1, processing 2, error 3, waiting 该数值存储在表PACKET中的PacketStatus列中 在我的视图中,我希望将DataDelivery显示为表行,包括一列,该列显示所有相关数据包的组合状态。数据包的
0, processed
1, processing
2, error
3, waiting
该数值存储在表PACKET中的PacketStatus列中
在我的视图中,我希望将DataDelivery显示为表行,包括一列,该列显示所有相关数据包的组合状态。数据包的组合状态应根据以下逻辑确定:
如果与数据传递相关的任何一个数据包的状态为“错误”:视图列应显示“错误”
如果与数据传递相关的任何一个数据包的状态为“等待”:视图列应显示“等待”
如果与数据传递相关的所有数据包的状态为“已处理”:视图列应显示“已处理”
如果与数据传递相关的所有数据包的状态为“正在处理”:视图列应显示“正在处理”
如果与数据传递相关的所有数据包的状态为“已处理”或“正在处理”:视图列应显示“正在处理”
在所有其他情况下,视图列应显示:“错误”。计数忽略空值。您可以使用这个事实对case表达式执行计数,以统计处于哪个状态的数据包的数量。从那时起,就需要将所有东西与箱子粘在一起:
选择dd.*,状态
从数据交付dd
加入选择dataDeliveryId,
计数时的案例案例状态为2时1结束>0时,则为“错误”
当COUNTCASE状态为3时1结束>0时,则为“等待”
当COUNTCASE状态为0时,则1结束=计数*然后为“已处理”
当COUNTCASE状态为1时,则1结束=计数*然后为“处理”
否则“错误”结束为状态
从数据包
在dd.dataDeliveryId=p.dataDeliveryId上按dataDeliveryId p分组
谢谢你的回答,它马上就起作用了。我认为可能有一个更简单的解决方案,比如虚拟列,或者在实体DataDelivery中使用@Formula注释,而不是创建一个涉及代码中许多其他更改的视图。你认为值得调查吗?