我的表有4列,由两个组(ID_PROCESSO, ID_INSTANCIA_BPM)和(ID_INSTANCIA_BPM_PAI, ID_PROCESSO_PAI)分隔。
如果第二组(ID_INSTANCIA_BPM_PAI AND ID_PROCESSO_PAI)为null,并且此记录的第一组不是作为第二组记录的ID_PROCESSO == ID_PROCESSO_PAI,则必须返回它。
如果第二组(ID_INSTANCIA_BPM_PAI AND ID_PROCESSO_PAI)为not null和ID_PROCESSO <> ID_PROCESSO_PAI,则必须返回。
对于sqlfiddle示例,返回应该遵守如下规则
#|ID_PROCESSO|ID_INSTANCIA_BPM|ID_INSTANCIA_BPM_PAI|ID_PROCESSO_PAI
1 3 2957 (null) (null) --Returned
2 5 2958 2957 3 --Returned
3 4 2960 (null) (null) --Returned
4 4 2975 (null) (null) --Returned
5 3 2976 (null) (null) --Removed by #10
6 3 2977 (null) (null) --Removed by #9
7 5 2978 2977 3 --Removed by #8
8 5 2979 2978 5 --Returned
9 3 2980 2977 3 --Returned
10 3 2981 2976 3 --Returned
11 4 2984 (null) (null) --Returned所以结果一定是:
#|ID_PROCESSO|ID_INSTANCIA_BPM|ID_INSTANCIA_BPM_PAI|ID_PROCESSO_PAI
1 3 2957 (null) (null) --Returned
2 5 2958 2957 3 --Returned
3 4 2960 (null) (null) --Returned
4 4 2975 (null) (null) --Returned
8 5 2979 2978 5 --Returned
9 3 2980 2977 3 --Returned
10 3 2981 2976 3 --Returned
11 4 2984 (null) (null) --Returnedhttp://sqlfiddle.com/#!18/32c86/1
有没有人知道这是否只能通过select来实现,或者我是否需要一个游标来实现这个结果?
https://stackoverflow.com/questions/51368966
复制相似问题