![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 alice ![]()
![]() |
id name --------- 01 A 02 B 03 C 04 D 05 E 請教先進,該如何才能以3筆去切成以下結果 id name id2 name2 --------------------- 01 A 04 D 02 B 05 E 03 C
搜尋相關Tags的文章:
[ 資料分割 ] ,
本篇文章發表於2015-10-29 20:47 |
1樓 |
select 5.0/3.0
select ceiling(1.66666) sql for 迴圈組字串 建table sql for 迴圈塞資料
本篇文章回覆於2015-10-29 22:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
alice ![]() |
謝謝,請問sql for 迴圈組字串 建table這裡要怎麼寫呢
本篇文章回覆於2015-10-29 23:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
create table #rep(id nvarchar(50) primary key, name nvarchar(50) null) insert #rep select '01','A' insert #rep select '02','B' insert #rep select '03','C' insert #rep select '04','D' insert #rep select '05','E' DECLARE @i INT DECLARE @MAX INT SET @i = 0 SET @MAX = (select ceiling(1.66666)) WHILE (@i<@MAX) BEGIN select @i Set @i=@i+1 END create table 你會吧? insert 資料你會吧!?
本篇文章回覆於2015-10-30 11:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓
作者回應
alice ![]() |
您好
資料寫入#table,這個部份我會 您所說的sql for 迴圈組字串 建table,是否是要動態建立? 例如資料筆數是7筆時,判斷新增所需要的column數,這個地方我比較不懂如何處理
本篇文章回覆於2015-10-30 12:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓 |
建table的我幫你寫 塞資料的你自己來吧!
alter procedure usp_tb as declare @資料筆數 numeric(18,2)=(select count(*) from #rep) declare @套數 numeric(18,2)=3 declare @迴圈數 int =(select ceiling(@資料筆數/@套數)) declare @ctb nvarchar(200)='' DECLARE @i INT DECLARE @MAX INT SET @i = 0 SET @MAX = @迴圈數 WHILE (@i<@MAX) BEGIN set @ctb+='id'+convert(varchar(2),@i)+' nvarchar(50),name'+convert(varchar(2),@i)+' nvarchar(50),' Set @i=@i+1 END declare @ctbsql nvarchar(2000)='create table repxx( '+left(@ctb,len(@ctb)-1)+')' execute(@ctbsql)
本篇文章回覆於2015-10-30 15:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓
最有價值解答
真的有點難 ![]() |
好啦 我好人做到底
--資料來源 create table #rep(id nvarchar(50) primary key, name nvarchar(50) null) insert #rep select '01','A' insert #rep select '02','B' insert #rep select '03','C' insert #rep select '04','D' insert #rep select '05','E' --建立table create procedure usp_tb as declare @資料筆數 numeric(18,2)=(select count(*) from #rep) declare @套數 numeric(18,2)=3 declare @迴圈數 int =(select ceiling(@資料筆數/@套數)) declare @ctb nvarchar(200)='' DECLARE @i INT DECLARE @MAX INT SET @i = 0 SET @MAX = @迴圈數 WHILE (@i<@MAX) BEGIN set @ctb+='id'+convert(varchar(2),@i)+' nvarchar(50),name'+convert(varchar(2),@i)+' nvarchar(50),' Set @i=@i+1 END declare @ctbsql nvarchar(2000)='create table repxx( '+left(@ctb,len(@ctb)-1)+')' execute(@ctbsql) --新增一個自動編號的欄位 alter table repxx add sn int identity(1,1) primary key --塞資料 select sn=identity(int,1,1),id,name into #rep2 from #rep --select * from #rep2 create procedure usp_ins as DECLARE @i INT DECLARE @MAX INT SET @i = 1 SET @MAX = (select count(*) from #rep2) WHILE (@i<=@MAX) BEGIN declare @id nvarchar(50)='' declare @name nvarchar(50)='' declare @ins nvarchar(2000)='' declare @insid nvarchar(50)='' declare @updid nvarchar(50)='' declare @upd nvarchar(2000)='' select @id=id,@name=name from #rep2 where sn=@i if @i % 3=0 begin set @updid='3' set @insid= convert(nvarchar(2),(@i/3)-1) end else begin set @insid= convert(nvarchar(2),(@i/3)) end if @i<=3 begin set @ins='insert repxx(id'+@insid+',name'+@insid+')' set @ins+=' select '''+@id+''','''+@name+'''' execute(@ins) end if @i>3 begin set @updid=@i%3 select @id=id,@name=name from #rep2 where sn=@i set @upd='update repxx set id'+@insid+'='''+@id+''',name'+@insid+'='''+@name+''' where sn='''+@updid+'''' execute(@upd) end Set @i=@i+1 END select * from repxx
本篇文章回覆於2015-10-30 17:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓
作者回應
alice ![]() |
謝謝您
今天下午我用固定兩欄的方式寫出來了,方式雷同您寫入的方式 動態建table的部份我再試看看
本篇文章回覆於2015-10-30 21:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
8樓 |
這一組SQL就可以完成, 沒必要使用Stored Procedure啊。
本篇文章回覆於2015-10-31 10:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
9樓 |
poocedure 可以使用alt+x的方便性
本篇文章回覆於2015-10-31 12:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |