1. sql 一行拆多行
10G及以上:WITH t AS (
SELECT 1 str1,'a,b,d,e,f' str2 FROM al
)
SELECT 1,regexp_substr(str2,'[^,]+',1,ROWNUM) FROM t CONNECT BY ROWNUM<6
其中 with 語句是構造數據的。
2. SQL server 一行拆多行
;WITH CTE AS
(
SELECT cname,dqty1,dqty1 AS row
FROM TID
UNION ALL
SELECT cname,dqty1,row-1
FROM CTE
WHERE row>1
)
SELECT * FROM CTE
ORDER BY CTE.cname,CTE.dqty1,CTE.row
OPTION (MAXRECURSION 0)
3. SQL資料庫語句如何將一行變多行(sql多行數據轉為一行多列)
用一個循環。
先用參數取到到底要變成多少行,和單價
declare@tint
declare@salnvarchar(8)
根據需運猛求或實際情況將應變為多少行這旁橡橋個烤取給變數@t,單價取給@sal
設置循環的起始數值
declare@iint
set@i=1
開始循環如御
while(@i<=@t)
begin
--將單行的數據插入需要的表
insertinto()
values()
--循環參數自增
set@i=@i1
end
4. sql2000 表中一列內容拆分轉多行語句
--搭建環境
create table #(a int,b varchar(60))
insert into # select 1,'123,456,xxx,789' union all select 2,'321,213,sss,985'
select * from #
go
------------------------------測試---------------------------------------------
--update組成查詢字元串
update # set b=';'+b+';'
update # set b=replace(b,';','''')
update # set b=replace(b,',',''',''')
go
--創建中間表
create table #tmp(a int identity(1,1),co1 varchar(10),co2 varchar(10),co3 varchar(10),co4 varchar(10))
go
--如果#表中行數太多,可能會超過8000的長度,可以考慮用游標替換這部分
declare @sql varchar(8000)
set @sql=''
select @sql=@sql+b+' union all select ' from #
select @sql='select '+left(@sql,len(@sql)-17)
select @sql='insert into #tmp(co1,co2,co3,co4) '+@sql
print @sql
exec(@sql)
select * from #tmp
---------------------------------
select a,co1 from #tmp union all
select a,co2 from #tmp union all
select a,co3 from #tmp union all
select a,co4 from #tmp
order by a
5. sql server語句 單行數字數據拆分成多行
CreateTAbleT
(
RoomIDVArchar(10),
BedNumint
)
InsertintoTvalues('1000',2)
Insertinto則晌Tvalues('1011',1)
InsertintoTvalues('1012',陵前2)
InsertintoT尺盯清values('1013',4)
--如果BedNum小於等於2047
SelectT.*,numberfromTCrossjoinmaster.dbo.spt_valuesB
wheretype='P'andnumber<=BedNumandnumber>0
--如果BedNum小於等於32767
withCT
AS
(
SelectRoomID,BedNum,1AsnumberfromT
unionall
SelectRoomID,BedNum,number+1fromCTwherenumber<BedNum
)
Select*fromCT
orderbyRoomID
OPTION(MAXRECURSION32767)
6. sql 怎麼把一個欄位的值分成多行
declare定義一個變數 @str 這個變數的屬性為 varchar(100) 將'a.bb.ccc' 賦給變數 @str 下面的意思是從master(資料庫的名字)中的spt_values(表名)查出欄位為 col 的數據,同時這個是有條件的,where後面就是具體的條件:type=1同時 欄位numb
7. 如何用SQL語句將數據一行變成多行呢
截斷數據,在新增分隔符即可。
放大招
指定索引號,進行數據截取,返回處理後的字元串數組
string str =你的數據
str.substring(你想分的長度)你自己列印一個轉換符就好了
8. SQL一行多列數據分解成多行數據
selecta.*from
(
select省份,編號,姓名,手機1from表名
unionall
select省份,編號,姓名,手爛薯孫機2as手機1飢鏈from表手薯名
unionall
select省份,編號,姓名,手機3as手機1from表名
)asa
orderbya.省份,a.編號,a.姓名
9. sql一行拆分多行記錄
看個例子 改改再用 應該沒問題
QL> select * from t00;
ID ACHAR
---------- ----------
1 ab,ac,ad
1 cc,cf
2 bb,bc,be
SQL> select * from (select id,regexp_substr(achar,'[^,]+',1,level) achar from t00 connect by level<=length(achar)-length(regexp_replace(achar,',',''))+1) group by id,achar order by id ;
ID ACHAR
---------- --------------------
1 ab
1 ac
1 ad
1 cc
1 cf
2 bb
2 bc
2 be
已選擇8行。
10. sql 語句怎麼將一行拆分成兩行
先創建spilt方法,然後調用就行。
1.
--創建function
create or replace function split
(
p_list varchar2,
p_sep varchar2 := ','
) return type_split pipelined
is
l_idx pls_integer;
v_list varchar2(50) := p_list;
begin
loop
l_idx := instr(v_list,p_sep);
if l_idx > 0 then
pipe row(substr(v_list,1,l_idx-1));
v_list := substr(v_list,l_idx+length(p_sep));
else
pipe row(v_list);
exit;
end if;
end loop;
return;
end split;
2.select * from table(split('曹xx,中XX'));