我一直在努力研究如何实现这一目标,但我认为我只是没有技能知道首先要寻找什么。我正在使用现有系统,我无法改变数据库架构,也无法决定用户如何输入数据。我必须与我们的工作合作。
目前,我们的用户将统计数据放入表格的一个文本字段中。他们使用的是每行一个统计数据的标准格式,文本限定符用于“划分”统计信息的详细信息。即。
<Category> - D:<Description> Q:<Quanitity> V:<Value>
<Category> - D:<Description> Q:<Quanitity> V:<Value>
(实际数据中没有任何&lt;&gt;括号......我只是用它们来显示细节的位置。)
在上面的示例中,两个统计信息保存在一个文本字段记录中...表中有许多“统计信息”记录。
编辑:我正在使用MS SQL Server 2005 我需要为每个描述的quanitites / values的总和创建一个报告。
我已经实现了一个拆分用户函数,我可以在一条记录上使用它来将每一行拆分成单独的记录......但这就是我设法得到的。
我需要'从StatsTable中选择统计数据',然后遍历每个统计记录,将其拆分为单独的行,然后从每个分割行中提取类别,描述,数量和值,然后将所有结果返回到一个表
答案 0 :(得分:0)
我已经设法将一个嵌套的光标拼凑起来......它看起来很有效。
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