iT邦幫忙

0

SQL / Oracle SELECT每5筆增加一行空白行

select * from tt11
請問在不修改資料庫的情況下,如何改才能每五筆增加一行空白行,如下圖

https://ithelp.ithome.com.tw/upload/images/20181005/200824561ySpwYtyzh.jpg

如果你是採用資料庫的編輯器來說,在不變動資料庫的情況下。只剩下一招可以用。
那就是將資料用view或是temp表重新建立後。搭配你說的5筆一筆空白。

要不然就是自已用後端程式來表現。一般會建議這樣子處理。
請問一下每5筆加一行空白,有什麼關鍵字可查?
目前查到都是在最後面 或是餘數加空白行
你得先看你打算用何種方式。
因為一般來說,沒人會從資料庫下手。所以自然你也不容易找到這類的資源。
畢竟你真的想從資料庫下手,也就等於你得用個暫存表重建你想要的顯示資源。不管如何,都是一種很耗資源的做法
大多數都還是利用程式來做這樣的處理。

如果真的必要這樣做的話,我可以給你的建議是,用limit的方式,每取5筆新增到一個暫存表,每取5筆就立即追加一個空白記錄。
等所有的記錄都完成後。再顯示該暫存表。

用說的就覺得很耗時又耗資源了。

1 個回答

1
純真的人
iT邦高手 2 級 ‧ 2018-10-05 14:43:00
最佳解答

你的方式滿奇特的...

我大概只能這樣查吧@@..
因為編號是排序的結果~
弄成null會跑到前面去..

declare @tab table(
	item int
	,num int
	,sn varchar(5)
)
insert into @tab
values(1,11,'a')
,(2,11,'b')
,(3,11,'c')
,(4,11,'d')
,(5,11,'e')
,(6,11,'f')
,(7,11,'g')
,(8,11,'h')
,(9,11,'i')
,(10,11,'j')
,(11,11,'k')
,(12,11,'l')
,(13,11,'n')
,(14,11,'m')
,(15,11,'o')

select *
from ((
	select item
	,num
	,sn
	from @tab
)union all(
	select item
	,null
	,null
	from @tab
	where item % 5 = 0
)) as k
order by item

https://ithelp.ithome.com.tw/upload/images/20181005/20061369kBkwmAKSyj.png

看更多先前的回應...收起先前的回應...

抱歉請教一下,oracle 好像對下面空值方式是無效的

select '','','',' '
select null,null,null,null

oracle是用什麼方法取空值?

張小馬 iT邦新手 5 級 ‧ 2018-10-05 17:34:17 檢舉

直接把欄位命名上去就OK了,就是把null塞給num和sn這兩個欄位的概念,會跑不出來可能是某些語法限制你union時欄位要相同(沒命名會以為你是不同欄位)。
補充如下
select item
,null num
,null sn

感謝。
可否再請教一個問題
where item % 5 = 0
oracle不允許

要這樣吧..

create table table1(
	item number(19,0)
	,num number(19,0)
	,sn varchar2(30)
);

insert into table1(item,num,sn) values(1,11,'a');
insert into table1(item,num,sn) values(2,11,'b');
insert into table1(item,num,sn) values(3,11,'c');
insert into table1(item,num,sn) values(4,11,'d');
insert into table1(item,num,sn) values(5,11,'e');
insert into table1(item,num,sn) values(6,11,'f');
insert into table1(item,num,sn) values(7,11,'g');
insert into table1(item,num,sn) values(8,11,'h');
insert into table1(item,num,sn) values(9,11,'i');
insert into table1(item,num,sn) values(10,11,'j');
insert into table1(item,num,sn) values(11,11,'k');
insert into table1(item,num,sn) values(12,11,'l');
insert into table1(item,num,sn) values(13,11,'n');
insert into table1(item,num,sn) values(14,11,'m');
insert into table1(item,num,sn) values(15,11,'o');


select item
,num
,sn
from table1
union all
select item
,null
,null
from table1
where MOD(item,5) = 0
order by item,num ;

http://sqlfiddle.com/#!4/54b70/16

謝謝你!!

我要發表回答

立即登入回答