WITH T1 AS SELECT DISTINCT(DETAILS) FROM ( SELECT STATUS, PREREQUISITE_NM,
(case when (STATUS='Completed' ) then 'Completed'
when (STATUS='Pending' ) then 'Pending'
when (STATUS='Failed' and PREREQUISITE_NM = 'Y') then 'Failed'
when (STATUS='Failed' and PREREQUISITE_NM = 'N') then 'Completed'
end )DETAILS FROM TABLE_LIST WHERE ID=1))
T2 AS ( SELECT DETAILS FROM T1)
结果1:
悬而未决的
失败
完整的。
结果2:
失败
完整的。
在上面的查询中,我们看到根据可用数据的不同结果集。我想在t2块中写一个查询,它的输出应该是:
对于挂起/失败/完成:应将挂起作为输出。
for failed/completed:应将failed作为输出。
不使用plsql块就可以通过查询实现这一点吗。喜欢用with子句吗?
我可以这样解释我的目标
假设t1块给我的结果是三行挂起,失败,完成,然后我想挂起作为一个输出值。如果t1块给我的结果是failed,completed,那么我想把failed作为输出值。如果t1块只给出completed,则completed将被视为输出值。
3条答案
按热度按时间j8yoct9x1#
你可以用
ROW_NUMBER()
分析函数,用于将这些状态值按字母顺序向下移动,以满足您的需要:qyzbxkaa2#
谢谢罗伯托和巴巴拉斯·欧尚,两个答案都很有用。我的一个同事分享了另一种方式。
cclgggtu3#
在阅读了您的评论之后,我提出了这个解决方案,这也许不是最好的,但是在最后给出了您期望的输出,基于此,您实际想要的是将t1中生成的行转置为t2中的列
我使用了我自己的测试,请注意替换列或修改任何必要的内容以使其适应您自己的查询
所以,如果我得到了第一部分的问题
现在我只需要在这个结果上构建一个案例(根据您自己的需求修改它)