Sql server 标记列

Sql server 标记列,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有一个orders表,其中包含由空格分隔的订单详细信息-订单详细信息可能包含多个项目是的,我知道这打破了数据库惯例,但它是我们的第三方数据库之一。我已经能够提取它,但解决方案不是很优雅。不知道你们有没有更好的解决方案 例如: 详情栏 [订单类型][数量][项目][其他信息][订单类型][数量][项目][其他信息] 因此,每列可能包含多个订单项这可以通过修改一个现有的字符串拆分器函数来实现,以便它不仅返回单词,还返回原始字符串中的数字。然后你必须寻找单词“买”和“卖”,得到它们的数字,接下来的两

我有一个orders表,其中包含由空格分隔的订单详细信息-订单详细信息可能包含多个项目是的,我知道这打破了数据库惯例,但它是我们的第三方数据库之一。我已经能够提取它,但解决方案不是很优雅。不知道你们有没有更好的解决方案

例如: 详情栏 [订单类型][数量][项目][其他信息][订单类型][数量][项目][其他信息]


因此,每列可能包含多个订单项

这可以通过修改一个现有的字符串拆分器函数来实现,以便它不仅返回单词,还返回原始字符串中的数字。然后你必须寻找单词“买”和“卖”,得到它们的数字,接下来的两个单词分别是数量和物品

查询:

输出:


见样本

我不清楚。你能发布2或3行样本数据吗?如果你不分享你的数据,很难说我们是否有更好的解决方案。老实说,我会找一个新的第三方提供商^^^所以一行可能是这样的:2008年10月购买1 AAA 2008年11月购买3 JJJ 2009年1月在这个例子中,我只想提取数量和项目。我基本上做了一个嵌套游标。我没有时间发布解决方案,因为我需要去掉某些工作隐私的东西,但我会稍后再讨论。那里有大量字符串拆分函数的示例。
declare @str varchar(1000)
set @str = 'Buy 1 AAA Oct 2008 Sell 1 AAA Nov 2008 Buy 3 JJJ Jan 2009'

;with words as (
    select word, wordNum
    from ftStringSplit(@str, ' ')
),
tokenNums as (
    select wordNum + 1 as wnQty, wordNum+2 wnItem
    from words
    where word in ('Buy', 'Sell')
)
select wI.word as Item, wQ.word as Qty
from tokenNums tn
    join words wI on wI.wordNum = tn.wnItem
    join words wQ on wQ.wordNum = tn.wnQty
| ITEM | QTY |
|------|-----|
|  AAA |   1 |
|  AAA |   1 |
|  JJJ |   3 |