如有表資料,部分記錄(其中列'banid'為主關鍵字)如下:
banid stylenocolor
2**15-*2-046 特白:11件;中灰:8件;彩藍:8件;鮮黃:8件;鮮橙:8件;
需要取出列'stylenocolor'中的資料,並求和。目前我採取的方法如下:
--建立記錄板單顏色件數資訊表
ifexists(select
1from sysobjects where id=
object_id('
tb_getsum_banid
') and xtype='u
')drop
table
tb_getsum_banid
gocreate
table
tb_getsum_banid
( banid
varchar(20) primary
keynot
null
, qty
intdefault0)
go--
定義宣告獲取板單件數游標
declare
@banid
varchar(20),@qty
int,@stylenocolor
varchar(2000
)declare cur_getsum_banid cursor
forselect
distinct
banid,stylenocolor
from
b_itemsendfactory_head
where
isnull(banid,'') <>
''--
開啟游標
open
cur_getsum_banid
--使用游標
fetch
next
from cur_getsum_banid into
@banid,@stylenocolor
while
@@fetch_status=0
begin
declare
@xint
set@x=0
set@qty=0
while
@x<
len(@stylenocolor)+
1begin
--取第一次查詢到的數字
set@qty
=@qty
+substring(@stylenocolor
,
patindex('
%[^0-9][0-9]%
',@stylenocolor)+1,
patindex('
%[0-9][^0-9]%
',@stylenocolor)-
patindex('
%[^0-9][0-9]%
', @stylenocolor
))
--取第一次出現數字後的字元
set@stylenocolor
=substring(@stylenocolor
,
patindex('
%[0-9][^0-9]%
',@stylenocolor)+1,
len(@stylenocolor)-
patindex('
%[0-9][^0-9]%
',@stylenocolor)+1)
set@x=@x
+1end--
逐行插入表資料
insert
into
tb_getsum_banid
values(@banid,@qty
)
fetch
next
from cur_getsum_banid into
@banid,@stylenocolor
end--
關閉游標
close
cur_getsum_banid
--釋放游標
deallocate
cur_getsum_banid
go
在kettle使用迴圈來處理表中的資料
有時候,如果kettle事務中源表的資料非常大的時候,一下子把源表中的資料全部讀入記憶體的方式是不可取的。在mysql中,我們可以通過迴圈的方式,使用limit來定量取得一部分資料來處理。即,關鍵的sql是 select from table name limit current value,ste...
SQL中字串處理函式
一 字元轉換函式 1 ascii 返回字元表示式最左端字元的ascii 碼值。在ascii 函式中,純數字的字串可不用 括起來,但含其它字元的字串必須用 括起來使用,否則會出錯。2 char 將ascii 碼轉換為字元。如果沒有輸入0 255 之間的ascii 碼值,char 返回null 3 lo...
SQL 中in傳入字串的處理
路就是把傳入的字串轉換成乙個table,見 declare temptable table f1 nvarchar 20 declare ch nvarchar 20 declare planningcrewids nvarchar 200 set planningcrewids 1,2,3,4,w...