Solution for calculate & Output without Declare (Useful for SQL Developer)

select t0.family_ident,ss.student_number,ss.first_name,ss.last_name,ss.grade_level,to_char(ss.DISTRICTENTRYDATE,'MM/DD/YYYY'),to_char(ust.CUST_VISAEXPIRE,'MM/DD/YYYY'),to_char(ust.CUST_PASSPORTEXPIRE,'MM/DD/YYYY'),usf.CUST_FATHEREMAIL,usf.CUST_FATHERMOBILEPHONE,usf.CUST_MOTHEREMAIL,usf.CUST_MOTHERMOBILEPHONE 

from students ss 

join  

  ( 

WITH CORE AS 

( 

SELECT T0.FAMILY_IDENT,T0.ESSTUD,T0.MSSTUD,T0.HSSTUD,T0.SUMSTUD, 

(case when (T0.ESSTUD<>0 AND T0.MSSTUD=0 AND T0.HSSTUD=0) THEN 1 

      when (T0.ESSTUD<>0 AND T0.MSSTUD<>0 AND T0.HSSTUD=0) THEN 2 

      when (T0.ESSTUD=0 AND T0.MSSTUD<>0 AND T0.HSSTUD=0) THEN 3 

      when (T0.ESSTUD=0 AND T0.MSSTUD<>0 AND T0.HSSTUD<>0) THEN 4 

      when (T0.ESSTUD=0 AND T0.MSSTUD=0 AND T0.HSSTUD<>0) THEN 5 

      when (T0.ESSTUD<>0 AND T0.MSSTUD=0 AND T0.HSSTUD<>0) THEN 6  

      when (T0.ESSTUD<>0 AND T0.MSSTUD<>0 AND T0.HSSTUD<>0) THEN 7  

      END 

) AS FMTYPE 

FROM 

(SELECT family_ident, 

count( CASE WHEN grade_level<=5 THEN 1  

ELSE null END) as ESstud, 

count( CASE WHEN grade_level>=6 and grade_level<=8 THEN 1  

ELSE null END) as MSstud, 

count( CASE WHEN grade_level>=9 THEN 1  

ELSE null END) as HSstud, 

COUNT(student_number) as Sumstud 

FROM  students 

where ENROLL_STATUS='0' 

GROUP BY family_ident) T0 

order by FMTYPE DESC 

), 

ROWinfo as  

( 

select to_char(MAXROW) as MAXROW, to_char(CHECKPOINT1) as CHECKPOINT1 ,to_char(CHECKPOINT2) as CHECKPOINT2 

from 

( 

( 

select count(family_ident) as MAXROW, ROUND(count(family_ident)/3,0) AS CHECKPOINT1,ROUND(count(family_ident)*2/3,0) AS CHECKPOINT2 

from (SELECT family_ident, 

count( CASE WHEN grade_level<=5 THEN 1  

ELSE null END) as ESstud, 

count( CASE WHEN grade_level>=6 and grade_level<=8 THEN 1  

ELSE null END) as MSstud, 

count( CASE WHEN grade_level>=9 THEN 1  

ELSE null END) as HSstud, 

COUNT(student_number) as Sumstud 

FROM  students 

where ENROLL_STATUS='0' 

GROUP BY family_ident) 

) 

) 

) 

--CORE prepare all basic data for all unit-- 

--ROWinfo set 1/3checkpoint and 2/3 checkpoint-- 

select RNUM,FAMILY_IDENT,ESSTUD,MSSTUD,HSSTUD,SUMSTUD,fmtype 

from  

(SELECT count(1)over(order by core.FMTYPE,core.FAMILY_IDENT) as RNUM,core.FAMILY_IDENT as FAMILY_IDENT,core.ESSTUD as ESSTUD,core.MSSTUD as MSSTUD,core.HSSTUD as HSSTUD,core.SUMSTUD as SUMSTUD,core.fmtype as fmtype from core) trow 

--Give this group a new rownumber for group all family-- 

where  

(case 

when FMtype=1 

then  1 

end) =1 

or  

(case 

when RNUM<=(select checkpoint1 from rowinfo) and FMtype=2 

then  1 

end) =1 

  ) t0 

on ss.family_ident=t0.family_ident  

and (ss.DISTRICTENTRYDATE>'16-DEC-2016' or ss.DISTRICTENTRYDATE='01-JAN-1900' ) 

join U_DEF_EXT_STUDENTS ust 

on ss.DCID=ust.STUDENTSDCID  

and (ust.CUST_VISAEXPIRE<='16-NOV-2016' 

or ust.CUST_PASSPORTEXPIRE<='16-NOV-2016' 

or (ust.CUST_VISAEXPIRE=null and ss.SCHOOLENTRYDATE<='15-AUG-2016') 

or (ust.CUST_PASSPORTEXPIRE=null and ss.SCHOOLENTRYDATE<='15-AUG-2016')) 

and ss.enroll_status='0' 

join PS.U_STUDENTSUSERFIELDS usf 

on ss.DCID=usf.STUDENTSDCID 

order by ss.family_ident,ss.grade_level,ss.first_name,ss.student_number; 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值