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'));