oracle识别不了的字,oracle在子查询里写别名 为什么有时候能识别 有时候不能识别...

WITH T1 AS( --已经被下过子的位置

SELECT L,S,ROW_NUMBER() OVER(PARTITION BY s ORDER BY L DESC ) R FROM (

select LEVEL L,SUBSTR('---------',LEVEL,1) S from DUAL  CONNECT BY LEVEL<=3*3) where S<>'-'

), CURRENT_BOR AS (--当前的局面是怎么样的

select s,list_o o,b_o,list_x x,b_x   --s 为一共落子的数,O表示当前O落的位置有哪些 B_O表示O当前的局面 X同理

FROM(SELECT count(*) s from T1)  nm,

(select ','||LISTAGG(L,',') WITHIN GROUP(ORDER BY R DESC) list_o,

replace('---------','X','-') b_o  FROM T1 where s='O') t_O,

(select ','||LISTAGG(L,',') WITHIN GROUP(ORDER BY R DESC) list_x,

replace('---------','O','-') b_X  FROM T1 where s='X') t_X

),T_ADD_SOURCE AS( --还可以落子的位置

SELECT L FROM (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL<=3*3) WHERE L NOT IN (SELECT L FROM T1) order by  l

)

,ALL_T(s,b_all,qz) AS (

SELECT c.s,'---------' b_all,1 FROM CURRENT_BOR c

UNION ALL

SELECT at.s+1 s,

SUBSTR(at.b_all,1,t.L-1)||DECODE(MOD(at.s,2) ,0,'X','O')||SUBSTR(at.b_all,t.L+1) b_all,

GREATEST(1,

(SELECT MAX(GREATEST(

LEAST(INSTR((SELECT LISTAGG(CASE WHEN u

ELSE SUBSTR(b_all,t.l+(u-CEIL(t.l/3))*(3+1),1)   END)  WITHIN GROUP(ORDER BY u) FROM (SELECT LEVEL u FROM DUAL CONNECT BY LEVEL <= 3)

WHERE  u<=(SELECT max(u) from t WHERE u=CEIL(CASE WHEN u<=CEIL(t.l/3) THEN  t.l-(CEIL(t.l/3)-u)*(3+1) ELSE t.l+(u-CEIL(t.l/3))*(3+1) END/3))

AND u>=(SELECT min(u) from t WHERE u=CEIL(CASE WHEN u<=CEIL(t.l/3) THEN  t.l-(CEIL(t.l/3)-u)*(3+1) ELSE t.l+(u-CEIL(t.l/3))*(3+1) END/3))),

LPAD(DECODE(MOD(at.s,2),0,'X','O'),LEVEL,DECODE(MOD(at.s,2),0,'X','O'))),1)*LEVEL

,2

)) FROM dual  CONNECT BY LEVEL <= 3)

)

FROM  ALL_T at,T_ADD_SOURCE t

WHERE at.s<3*3

)select * from ALL_T

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值