declare
創(chuàng)新互聯(lián)建站主營順平網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,app軟件定制開發(fā),順平h5微信小程序搭建,順平網(wǎng)站營銷推廣歡迎順平等地區(qū)企業(yè)咨詢
teacher_name varchar(20)------------跟teacher表中老師名字類型保持一致
cursor t_name is select teachername from teacher---------申明游標t_name為從teacher表中查詢老師名字
begin
open t_name;------打開游標t_name
loop-------開始循環(huán)(遍歷)
fetch t_name into teacher_name-------將老師名字值賦予變量teacher_name
if t_name%found-------------開始遍歷有值時插入以下數(shù)據(jù)
then
select name,count(*) into new_table
from table_teacher_student
where name=teacher_name group by name-----將一個老師名字依據(jù)條件插入新表數(shù)據(jù)
else
dmbs_output.put_line(‘完成所有工作’);---------遍歷結(jié)束時輸出完成工作
exit;
end if;
end loop;
倉促寫下以上內(nèi)容,可能部分語法報錯,思路就是這樣,很基本的一個游標使用。
寫法有很多種,例如下面的:
方法一:select * from dual where time between to_date('2012-06-18 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2012-06-18 23:59:59','yyyy-mm-dd hh24:mi:ss');
方法二:select * from dual where to_char(time,'yyyy-mm-dd')='2012-06-18';
方法三:select * from dual where trunc(time)=to_date('2012-06-18','yyyy-mm-dd');
當然樓主也可以按上面的先轉(zhuǎn)換下日期的顯示格式再查詢?nèi)觯伎梢缘?,呵呵?。。?/p>
你查到的是2022-06-21的數(shù)據(jù),那么只需要再加一天2021-06-21不就可以了,在時間的地方加一個or,用擴考括起來就可以了。然后在group by和orderby的時候,加一個出院時間就OK了。
不過現(xiàn)在這個時間不能直接用,因為你的出院時間是包括時分秒的,這里你需要截取到日,不然group by和orderby的時候的時候也會按照時分秒去分組排序的。
至于出來以后的顯示結(jié)果什么樣,要看你要的是什么樣子,然后再用其他分組調(diào)整函數(shù)(比如cube等)想辦法調(diào)整最后的順序。
可以寫一個簡單的procedure來實現(xiàn),原理是遍歷日期范圍,并查詢?nèi)掌谫Y料筆數(shù),寫入表。
數(shù)據(jù)源表test03
1 2016-06-01 1
2 2016-06-02 1
3 2016-06-05 1
4 2016-06-04 1
5 2016-06-04 1
procedure代碼如下:
create or replace procedure loop_by_date(pbeg_tim in varchar2,--開始日期
pend_tim in varchar2,--結(jié)束日期
errmessage out varchar2) is
nCount number(10); --總天數(shù)
i_point number(10); --當天
is_zero number(10); --當天是否有記錄
begin
nCount := 0;
i_point := 0;
is_zero := 0;
select ROUND(to_date(pend_tim, 'yyyy-mm-dd') -
to_date(pbeg_tim, 'yyyy-mm-dd'))
into nCount
from dual;
delete from test02;
fst_loop
loop
select count(*)
into is_zero
from test03
where date1 =
to_char(to_date(pbeg_tim, 'yyyy-mm-dd') + i_point, 'yyyy-mm-dd');
insert into test02
(date01, nccount)
values
(to_char(to_date(pbeg_tim, 'yyyy-mm-dd') + i_point, 'yyyy-mm-dd'),
is_zero);
i_point := i_point + 1;
exit fst_loop when i_point = nCount;
end loop fst_loop;
--end;
end loop_by_date;
傳入?yún)?shù)"2016-06-01"~~"2016-06-10"并執(zhí)行,結(jié)果寫入test02為:
1 2016-06-01 1
2 2016-06-02 1
3 2016-06-03 0
4 2016-06-04 2
5 2016-06-05 1
6 2016-06-06 0
7 2016-06-07 0
8 2016-06-08 0
9 2016-06-09 0