有几张表没有权限,所以跑不起来。
目测黄色部分比较坑爹,死了n多脑细胞才看懂,又死了n多脑细胞才改出来。对5034进行了2次扫描,并多次分组排序求和。(分组和排序算法相对来说比较耗性能)
改为只扫描一次,一次编号操作。
这个没有什么既定的规则,就是使劲想各种奇葩办法简化。(这个改写就是利用了oracle在排序的时候,把null当成无穷大。而在sqlserver上就不适用了,因为sqlserver在排序的时候把null当无穷小)
黄色部分可改为下面的代码。
select *
FROM (select f1_5034,
decode(min(rn_a) - 1, 1, 0, min(rn_a) - 1) ylqk,
min(rn_b) - 1 bbqk
from (select case
when nvl(f25_5034, 0) > 0 then null
else rn end rn_a,
case
when f25_5034 Is not Null then null
else rn end rn_b,
f1_5034
from (Select f1_5034,
f3_5034,
f25_5034,
row_number() Over(partition By f1_5034 Order By f3_5034 Desc) rn
From wind.tb_object_5034
Where f3_5034 Like '%1231'))
group by f1_5034)
where bbqk is not null
--------------------原代码-------------------------
Select fdate,zqdm,zqmc,jysc,xzjq,dqsyl,fsynx,ffxjg,fpmje,fsqpmlv,ffxcs,ffxfs,fscfxr,
fssdd,fjxqsr,jxjzr,fxgm,cqxypj,dqxypj,'NULL' gjxypj,jhht,fldzrdb,ffxgsdm,fgsjc,zqlx,nvl(bbqk,0) bbqk,fxrq,
Case When nvl(zzc,0)<>0 Then 1 Else 0 End As xxplqk,ylqk ylqk,
hxzbczl,zzc,jzc,DbrXyPj,rzzt,shzt,'1' lsyjs,Jjbz, cxsmc, cxqsr,cxjzr,bjyy,lvlx,syyhdb,FCqXypj,FDqXypj,FGjxypj,FGnxypjJgd,FGjxypjJgd,DCqXypj,
'NULL' DGjxypj,flvjz,'NULL' FYsSyr, '0' fsdq ,'NULL' fsdqsr ,'NULL' fsdjzr ,'NULL' Fsdjzr2 ,fjcjq,flljq, '1' ffxzt,flvjzlb,'1' Ffxlx, fdbrdm,fdbr,Fdbrxz,FdbrSnmJzc,fsndgncqxy,Fdbrgnpjjg,
Ffxrlb,fzgr,fzgjzr,x.f13_5015 fzgbl,x.f12_5015 fzgjg, 'NULL' fzgzqdm,fsfsh,'NULL' fjkyy,fdbrzt,fggxx,
(Select F68_1854
From wind.tb_object_1854 T
Where nvl(BbQk, 0) >= 1
And F1_1854 = F25_4516
And F4_1854 =