❶ 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
❷ sql 拆分行數據
create or replace procere lpc_aa as
j number(38, 0);
k number(38, 0) default 0;
begin
for i in (select name, qty from lpc_001) loop
while (k < i.qty) loop
j := round(dbms_random.value(1, 10));
if (k + j > i.qty) then
j := i.qty - k;
end if;
insert into lpc_002 values (i.name, j);
k := k + j;
end loop;
k := 0;
end loop;
exception
when others then
rollback;
commit;
end;
用循環之類的把他插入到表中就行。不知道這個可不可以滿足你的要求。
❸ 如何用SQL語句將數據一行變成多行呢
截斷數據,在新增分隔符即可。
放大招
指定索引號,進行數據截取,返回處理後的字元串數組
string str =你的數據
str.substring(你想分的長度)你自己列印一個轉換符就好了
❹ 如何實現類似查詢分析器的拆分多條SQL語句的功能
很簡單啦:
在sqlserver裡面開設用戶只能進行"select"操作的用戶。
你的程序裡面就用這個用戶進行連接。
然後在程序規定使用SQL語句結束符「;」的個數為1。
拆分的話思路還是要使用程序的字元串函數來過濾。
截取,截取判斷都需要用到。
❺ sql如何把行拆分為幾行
如此問題,我也只能這樣貼例子了,如不能解決,可以繼續聯系
--分拆列值
--原著:鄒建
--改編:愛新覺羅.毓華(十八年風雨,守得冰山雪蓮花開)2007-12-16廣東深圳
/*
有表tb,如下:
idvalue
----------------------
1aa,bb
2aaa,bbb,ccc
*/
--欲按id,分拆value列,分拆後結果如下:
/*
idvalue
-------------------
1aa
1bb
2aaa
2bbb
2ccc
*/
--1.舊的解決方法(sqlserver2000)
selecttop8000id=identity(int,1,1)into#fromsyscolumnsa,syscolumnsb
selectA.id,substring(A.[values],B.id,charindex(',',A.[values]+',',B.id)-B.id)
fromtbA,#B
wheresubstring(','+A.[values],B.id,1)=','
droptable#
--2.新的解決方法(sqlserver2005)
createtabletb(idint,valuevarchar(30))
insertintotbvalues(1,'aa,bb')
insertintotbvalues(2,'aaa,bbb,ccc')
go
selectA.id,B.value
from(
selectid,[value]=convert(xml,'<root><v>'+replace([value],',','</v><v>')+'</v></root>')fromtb
)A
outerapply(
selectvalue=N.v.value('.','varchar(100)')fromA.[value].nodes('/root/v')N(v)
)B
droptabletb
/*
idvalue
-----------------------------------------
1aa
1bb
2aaa
2bbb
2ccc
(5行受影響)
*/
❻ sql一個欄位內有分隔符如何拆分成多行
select num,id, substr(test1,0,instr(test1, ',')-1) test1, substr(test2,0,instr(test2, ',')-1) test2, substr(test3,0,instr(test3, ',')-1) test3 from table_name --前
union
select num,id, substr(test1,instr(test1, ',')+1) test1, substr(test2,instr(test2, ',')+1) test2, substr(test3,instr(test3, ',')+1) test3 from table_name --後
instr(test1, ',') 是計算逗號的位置。
❼ 求一個SQL語句,按某一欄位值拆分多行
4行變成1行? 如果用 SQL Server 的話,可以用一種很 詭異的方法: SELECT DISTINCT ',' + SALE_ITEM FROM SALE_REPORT FOR XML PATH('') 樓主可以測試一下,最後用一個 FOR XML PATH('') 就好。 我上面的 SQL 執行結果為: ,C,A,B
❽ SQL如何把多條數據拆分
drop table test
create table test
(
VID int primary key,
VNum int,
vname varchar(10),
score int
)
insert into test values(1,001,'大海',20)
insert into test values(2,001,'大海',30)
insert into test values(3,001,'大海',40)
drop function fn_test
alter function fn_test
(
@vnum int
)
returns varchar(20)
as
begin
declare @str varchar(20)
select @str = isnull(@str+',','') + cast(score as varchar(2)) from test
return @str
end
go
select top 1 vid,vnum,vname,dbo.fn_test(vnum) as '分數' from test
/**
vid vnum vname 分數
----------- ----------- ---------- --------------------
1 1 大海 20,30,40
(所影響的行數為 1 行)
**/
可以了 呵呵呵呵呵
***********************************************************************************************這個是在SQL SERVER里執行的啊****************
❾ mssql根據條件數據列分解成多行數據,急
創建測試表
createtablet
(idint,
namevarchar(10),
typevarchar(10))
insertintotvalues(1,'蘋果','003')
insertintotvalues(2,'香蕉','A04')
insertintotvalues(3,'西瓜',NULL)
insertintotvalues(4,'石榴','002')
運行
selectt.*,t.name+s.name2name2fromtleftjoin
(selectdistincttype,
casewhenisnumeric(replace(type,0,''))=0then
left(replace(type,0,''),1)+cast(t1.idasvarchar)+'級'elsecast(t1.idasvarchar)+'級'endname2
fromt,
(select1inionall
select2inionall
select3inionall
select4id)t1
wheretypeisnotnull
andt1.id<=right(replace(type,0,''),1))s
ont.type=s.type
結果
selectdistincttype,
casewhenisnumeric(replace(type,0,''))=0then
left(replace(type,0,''),1)+cast(t1.idasvarchar)+'級'elsecast(t1.idasvarchar)+'級'endname2
fromt,
(select1inionall
select2inionall
select3inionall
select4id)t1
wheretypeisnotnull
andt1.id<=right(replace(type,0,''),1)