Oracle 實現查主表並取日誌表前 N 行行轉列

2021-09-02 10:46:22 字數 2688 閱讀 5274

下面sql的目標是實現在查詢主表記錄的同時將對應的前三行日誌的操作型別、操作時間、操作remark作為9列顯示

--建立測試表,初始化資料

create table test_main(

id number,

no varchar2(200)

);create table test_main_log(

log_id number,

id number,

opr_type varchar2(2),

no varchar2(200),

opr_date date,

remark varchar2(4000)

);declare i number;j number;

begin

i:=1;

j:=1;

loop

insert into test_main values(j,to_char(sysdate,'yyyymmdd')||j);

insert into test_main_log values(i,j,0,to_char(sysdate,'yyyymmdd')||j,sysdate-10,'test');

i:=i+1;

insert into test_main_log values(i,j,1,to_char(sysdate,'yyyymmdd')||j,sysdate-9,'test');

i:=i+1;

insert into test_main_log values(i,j,2,to_char(sysdate,'yyyymmdd')||j,sysdate-8,'test');

i:=i+1;

insert into test_main_log values(i,j,3,to_char(sysdate,'yyyymmdd')||j,sysdate-7,'test');

i:=i+1;

j:=j+1;

commit;

exit when i>200;

end loop;

end;

--查詢sql

select t.id,

max(t.no) as no,

max(case row_idx

when 1 then

decode(log_.opr_type,

0,'操作型別1',

1,'操作型別2',

2,'操作型別3')

else

null

end) opr_type_1,

max(case row_idx

when 1 then

log_.opr_date

else

null

end) opr_date_1,

max(case row_idx

when 1 then

log_.remark

else

null

end) opr_remark_1,

max(case row_idx

when 2 then

decode(log_.opr_type,

0,'操作型別1',

1,'操作型別2',

2,'操作型別3')

else

null

end) opr_type_2,

max(case row_idx

when 2 then

log_.opr_date

else

null

end) opr_date_2,

max(case row_idx

when 2 then

log_.remark

else

null

end) opr_remark_2,

max(case row_idx

when 3 then

decode(log_.opr_type,

0,'操作型別1',

1,'操作型別2',

2,'操作型別3')

else

null

end) opr_type_3,

max(case row_idx

when 3 then

log_.opr_date

else

null

end) opr_date_3,

max(case row_idx

when 3 then

log_.remark

else

null

end) opr_remark_3

from (select count(log.log_id) -- 利用分析函式算出當前日誌行屬於主表的記錄的第幾行日誌

over(partition by log.id

order by log.opr_date

rows between unbounded preceding and current row) row_idx,

log.*

from test_main_log log) log_,

test_main t

where t.id = log_.id(+)

group by t.id

order by t.id

shell指令碼實現檢視tomcat日誌

logs catalina.out,每次查個log,都得進很深的目錄,很麻煩,浪費時間。而且來來回回就幾個命令。檢視專案實時輸出的日誌 指令碼名稱 cat catalina log.sh 指令碼執行方式 sh cat catalina log.sh tomcat 8108 bin bash tail...

ORACLE 多種方法實現查詢

本次要說明的題目是 求各個部門的最高工資的最低工資的 員工最低工資 方法一 利用先用order by 後用rownum 擷取行數獲取 方法二 一步一步進行條件的篩選後,表之間的連線查詢,最後分組 方法三 利用子查詢,同樣是表的一步步條件篩選,只不過是用在子查詢這裡,同樣最後分組 個人推薦用方法二比較...

linux中find與rm實現查詢並刪除目錄或檔案

linux 下用find命令查詢檔案,rm命令刪除檔案。刪除指定目錄下指定檔案 find 要查詢的目錄名 name svn xargs rm rf 刪除指定名稱的檔案或資料夾 find type d grep svn xargs rm r 分析 find type d grep svn 通過此命令查...