create
table
#temp
(id
intidentity(1
,1),zise
nvarchar
(200))
declare
@zise
nvarchar
(200
)declare
@nint
declare
@rows
intselect@n=
1insert
#temp
(zise)
select
prosize
from
ttselect
@rows
=@@rowcount
while
@n<=
@rows
begin
select
@zise
=prosize
from
ttwhere
prosize=(
select
zise
from
#temp
where
id =@n)
--對欄位裡面不規則空格進行化為乙個空格
set@zise
=ltrim
(@zise
)set
@zise
=rtrim
(@zise
)while
charindex('
',@zise
)<>
0begin
set@zise
=replace
(@zise,'
',''
)end
--insert into #temp(zise) values (@zise) --原臨時表追加插入
update
#temp
setzise
=@zise
whereid=
@n--
更新--
print(@zise)
select@n=
@n+1end
select
*from
#temp
drop
table
#temp
/*結果:
44 1975*990*110 1740*1010*100
45 1975*990*110 1740*1010*100
46 1975*990*110 1740*1010*100
47 1010*920*190 1940*1010*110
48 1010*920*190 1940*1010*110
****
變成:27 1010*920*190 1940*1010*110
28 1010*920*190 1940*1010*110
29 1010*920*190 1940*1010*110
30 1010*920*190 1940*1010*110
*//*
字段(size):
1 aa
2 bb cc
*/--
可以通過 因為 bb cc 之間有空格
select
left
(zise,
charindex('
',zise)-1
) as
a from
#temp
where
id =
2select
left
(zise,
charindex('
',zise)-1
) as
a from
#temp
--傳遞到 substring 函式的長度引數無效。因為有些行沒有空格 如第一行
--解決:
--取第乙個
select
left
(zise,
charindex('
',zise+'
')-1
) as
a from
#temp
--取第二個 中間不規則空格
select
ltrim
(rtrim
(substring
(zise,
charindex('
',zise+'
'),len(zise+'
')-charindex('
',zise)+1
)))
asa
from
#temp
select
substring
(zise,
charindex('
',zise+'
'),len(zise+'
')-charindex('
',zise)+1
) as
a from
#temp
--臨時表 + while迴圈 對列進行遍歷
create
table
#temp
(id
intidentity(1
,1),zise
nvarchar(50
))declare
@zise
nvarchar(50
)declare
@nint
declare
@rows
intselect@n=
1insert
#temp
(zise)
select
prosize
from
ttselect
@rows
=@@rowcount
while
@n<=
@rows
begin
select
@zise
=prosize
from
ttwhere
prosize=(
select
zise
from
#temp
where
id =@n)
(@zise
) select@n=
@n+1end
drop
table
#temp
/*結果:
(169 行受影響)
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
*/--
游標(cursor) + while迴圈 對列進行遍歷
declare
@size
nvarchar(50
)declare
pcurr
cursor
forselect
prosize
from
ttopen
pcurr
fetch
next
from
pcurr
into
@size
while
(@@fetch_status=0
)begin
(@size
)fetch
next
from
pcurr
into
@size
endclose
pcurr
deallocate
pcurr
/*結果:
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
1940*1050*135
*/
SQL2005實現行轉成列
參考 愛新覺羅.毓華 時間 值 2009 01 01 90 2009 01 02 99 2009 02 01 95 得到如下結果 mycol 200901 200902 mycol 189 95 create table mytb time datetime,value float insert i...
SQL2005 行轉列 列轉行
在做報表時,經常需要將資料表中的行轉列,或者列轉行,如果不知道方法,你會覺得通過sql語句來實現非常難。這裡,我將使用pivot和unpivot來實現看似複雜的功能。這個功能在sql2005及以上版本才有。引用msdn 可以使用 pivot 和 unpivot 關係運算子將表值表示式更改為另乙個表。...
sql2005 行列轉換的例子
select categoryproductid,0 as p0,1 as p1,2 as p2,3 as p3,4 as p4,5 as p5,6 as p6,7 as p7,8 as p8,9 as p9 from select categoryproductid,sequence,proper...