我已經設法修補一個嵌套遊標......它看起來像是有效的。
declare o CURSOR FAST_FORWARD FOR
select comments from EVENT
declare @comment nvarchar(max)
OPEN o FETCH NEXT FROM o into @comment
while @@FETCH_STATUS = 0
BEGIN
Declare @item nvarchar(750)
declare @tbl Table(Category nvarchar(250), Description nvarchar(250), Quantity nvarchar(250), Value DECIMAL(10,2))
declare c CURSOR FAST_FORWARD FOR
SELECT items FROM dbo.Split(@comment, Char(10))
OPEN c FETCH NEXT FROM c into @item
WHILE @@FETCH_STATUS = 0
BEGIN
set @item = @item + ':'
insert into @tbl
Values (LTRIM(RTRIM(SUBSTRING(@item, 1, CHARINDEX(' - ', @item) - 1))),
CASE when @item like '%D:%' Then LTRIM(RTRIM(SUBSTRING(@item, CHARINDEX('D:', @item) + 2, CHARINDEX(':', @item, CHARINDEX('D:', @item)+2) - CHARINDEX('D:', @item) - 3))) else '' end,
CASE when @item like '%Q:%' Then LTRIM(RTRIM(SUBSTRING(@item, CHARINDEX('Q:', @item) + 2, CHARINDEX(':', @item, CHARINDEX('Q:', @item)+2) - CHARINDEX('Q:', @item) - 3))) else '1' end,
CASE when @item like '%V:%' Then CONVERT(DECIMAL(10,2),dbo.RemoveNonNumericCharacters(LTRIM(RTRIM(SUBSTRING(@item, CHARINDEX('V:', @item) + 2, CHARINDEX(':', @item, CHARINDEX('V:', @item)+2) - CHARINDEX('V:', @item) - 3))))) else 0 end)
FETCH NEXT FROM c into @item
END
CLOSE c DEALLOCATE c
END
CLOSE o DEALLOCATE o
SELECT * FROM @tbl
你說:「爲每個描述創建量化值/值的總和報告。」你能描述一下好一點嗎?你真的應該儘量避免用「通過每個統計記錄循環」等術語來思考......希望有一個直接的方法可以在沒有任何循環的情況下實現結果。但是您需要顯示一些示例數據和期望的結果。 – 2012-04-02 17:22:36
您可以添加當前結果的示例(使用分割函數之後)以及數據如何結束?另外,你允許使用存儲過程嗎? – 2012-04-02 17:25:09