3
我有一個表值函數,基本上是一個拆分類型的函數,每個數據字符串最多返回4行。T-SQL - 十字架適用於PIVOT? (使用與表值函數的樞軸)?
於是我運行:
select * from dbo.split('a','1,a15,b20,c40;2,a25,d30;3,e50')
我得到:
Seq Data
1 15
2 25
然而,我的最終數據需要像
15 25
所以我做一個支點。如預期
select [1],[2],[3],[4]
from dbo.split('a','1,a15,b20,c40;2,a25,d30;3,e50')
pivot (max(data) for seq in ([1],[2],[3],[4]))
as pivottable
它的工作原理:
1 2
--- ---
15 25
然而,一行是偉大的。我現在需要一次完成數百條記錄。我的想法是做一個交叉應用,但不知道如何組合一個交叉應用和一個樞軸。
(是的,很明顯,簡單的答案是寫一個修改版本,返回4列,但是這不是出於其他原因的最佳選擇)
任何幫助極大的讚賞。
而我這麼做的原因是:當前查詢使用SPLIT的標量值版本,在同一個SELECT(對於數據字符串爲500+字節)的同一SELECT內調用12次。
據我所知,這將需要它掃描相同的500字節* 1000000行,12次。
在表中的字段,我這樣做的原因是:由於邏輯在dbo.SPLIT量(這是什麼上面是一個激烈的簡單化) ,我試圖避免運行SPLIT的標量值函數版本,它看起來像'select dbo.split('a',1,'1,a15,b20,c40; 2,a25,d30; 3,e50 ''),被稱爲12次(「a」,「1」,「a」,「2」,「a」,「3」,「a」,「4」,「c」,1 「」'C'2" ,...),.當對一張有一百萬行的桌子進行查詢時,它就是一件壞事。 – mbourgon
我想我不理解的東西......你需要用新參數調用函數,所以CROSS APPLY不會幫助你。參數如何首先傳遞給函數?你能否概括介紹所涉及的過程? – Wil
而不是使用參數,我想從表中給它一個字段。當前進程基本上看起來像'select a,b,dbo.splitscalar('a',1,stringofdata),dbo.splitscalar('a',2,stringofdata),dbo.splitscalar('b',1,stringofdata) ...(總共12次),並且由於字符串是幾百個字節,所以我改變爲CROSS APPLY並且調用3次函數可能會更快。 – mbourgon