我有一個測試表像這個 -壓縮數據
Field
A
B
C
END
D
E
F
END
G
H
I
END
我要壓縮關鍵字「END」這個數據在此格式 -
Field
A|B|C
D|E|F
G|H|I
嘗試使用Monarch Pro,但無法獲得理想的結果。我真的無法想到在SQL中開始這種方式。請幫忙。
我有一個測試表像這個 -壓縮數據
Field
A
B
C
END
D
E
F
END
G
H
I
END
我要壓縮關鍵字「END」這個數據在此格式 -
Field
A|B|C
D|E|F
G|H|I
嘗試使用Monarch Pro,但無法獲得理想的結果。我真的無法想到在SQL中開始這種方式。請幫忙。
這可能有幫助。
DECLARE @WORD VARCHAR(300)
SELECT @WORD = COALESCE(@WORD + '|','') + Field FROM [YourTable]
SELECT @WORD = REPLACE(@WORD, 'END', '$')
SELECT @WORD Field INTO #A
;WITH c(FieldOutput, Field) as (
select CAST(LEFT(Field, CHARINDEX('$',Field+'$')-2) AS VARCHAR(100)),
STUFF(Field, 1, CHARINDEX('$',Field+'$')+1, '')
from #A
where ISNULL(Field, '') <> ''
union all
select CAST(LEFT(Field, CHARINDEX('$',Field+'$')-2) AS VARCHAR(100)),
STUFF(Field, 1, CHARINDEX('$',Field+'$')+1, '')
from c
where ISNULL(Field, '') <> ''
)
select FieldOutput AS Field
from c
編輯
創建一個fiddle測試了這一點。
我其實有超過100萬行。代碼已經運行了10多個小時。會讓你知道結果。 – user1463242
你可以先在小桌子上試試看看它是否適合你?嘗試一個'SELECT TOP 1000 * INTO ...'構造來填充臨時表並檢查它。 – SouravA
已經做到了。它工作正常。但是等待完整數據集的結果採用Varchar(max)。 – user1463242
高級別方法:
使用遊標逐行掃描表格。
附加到一個臨時變量,直到該行讀取'END',然後將temp變量的內容寫入到另一個表上的行。
迭代直到你到達表的末尾。
有可能是一個更優雅,非遊標的方式來做到這一點,但這將完成工作。
如果不能使用ORDER BY,則不能保證您按照您打算的順序逐步瀏覽表格。 –
「Field」是表中唯一的列嗎? –
是的。而問題是兩個連續的「結束」之間的行數可能會有所不同。只有槓桿我有這個關鍵詞。 – user1463242
然後,我不知道任何可能的方法,因爲您無法可靠地按字段排序,並且知道關鍵詞在哪些行之間發生。也許你可以在你的前端應用程序中處理這個問題? –