sql 中將多列變成行

mageqi發表於2008-06-04

因為需要將一個訂單對應的多個訂單屬性一次性顯示出來,因此需要將同屬一個訂單的訂單屬性列轉化成行。google 了下倒是找到一個可行的方法,並進行了實現。但是卻不知其所以然。

首先是建立一個函式:

Create function fPropertyMerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+sd.PropertyName+':'+ssp.PropertyValue from dbo.ServiceSubscriptionProperty ssp
inner join dbo.ServiceSchemaDefinition SD
on ssp.PropertyID=sd.PropertyID
where
if len(@str)>0 begin set @str=right(@str,len(@str)-1) end
return(@str)
end

然後進行呼叫, 比如進行如下測試:

print dbo.fPropertyMerg(2292)

結果顯示:

License數量:10,使用期限:12,空間容量:1

如願所行。

開始並不明白函式的一個select 語句為何能返回多值的合併行。因為總覺他並沒有利用遊標的功能。後來一思量,這個select 的關鍵是在於利用串變數,進行了串的追加功能,如果單獨分析這個select 語句來說,其實同樣是按照次序將多列選出來了,只是在每取一列的時候,都將值追加到了串中,所以最終返回的就是一個多值串。

有些邏輯真是微妙啊, 當然這是建立在理解原理的基礎上,進行稍微的變化,得到美妙的結果。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/523892/viewspace-1005163/,如需轉載,請註明出處,否則將追究法律責任。

相關文章