当前位置: 首页 > 知识库问答 >
问题:

获取所有以前年份记录的串联字符串的SQL存储过程

艾宏远
2023-03-14

我有一个表,里面有时间列。我正在尝试创建一个存储过程(SQL Server2008),为每一行获取一个字符串,其中包含所有以前年份的上一个值和当前行值。例如,如果我有下表。

_________________
   time    value
_________________
mar-2009     1
_________________
may-2009     2
_________________
jan-2010     3
_________________
apr-2011     4
_________________
feb-2011     5
_________________
jan-2012     6
_________________

我试图得到以下结果

____________________________________________________
   time    value          Result
____________________________________________________
mar-2009     1        "2009,1"
____________________________________________________
may-2009     2        "2009,2"
____________________________________________________
jan-2010     3        "2009,2,2010,3"
____________________________________________________
apr-2011     4        "2009,2,2010,3,2011,4"
____________________________________________________
feb-2011     5        "2009,2,2010,3,2011,5"
____________________________________________________
jan-2012     6        "2009,2,2010,3,2011,5,2012,6"
____________________________________________________

共有1个答案

越国源
2023-03-14

下面是示例,但出于性能目的,对原始表进行一些更改要好得多。

-- first we need to extract months/years to get comparable and sortable values
-- otherwise we can't select "all previous years" and "last value".
;with converted as (
    select
        time,
        right(time, 4) as year,
        datepart(m, '2000-' + left(time, 3) + '-01') as month,
        right(time, 4) + ',' + convert(varchar(16), value) as concatenated,
        value
    from
        YourTableName --TODO: Replace this with your table name
)
select
    time,
    value,
    -- using xml for string concatenation
    isnull((
        select
            prev.concatenated + ',' as 'text()'
        from
            converted as prev
        where
            prev.year < main.year
            and prev.month = (select max(month) from converted lookup where lookup.year = prev.year)
        for
            xml path('')
    ),'')
    + main.concatenated
from
    converted as main
 类似资料:
  • 问题内容: 我已经看到了关于获取所有可能的子字符串(即相邻字符集)的许多问题,但是对于生成所有可能的字符串(包括其子字符串的组合)都没有疑问。 例如,让: 我希望输出是这样的: 要点是,我们可以删除原始字符串中不相邻的多个字符(以及相邻的字符)。 到目前为止,这是我尝试过的: 但是,这只会从原始字符串中删除相邻字符串的集合,而不会返回上例中的元素。 另一个示例是,如果我们使用字符串,则输出列表应包

  • 问题内容: 这是我获得所有可能性的代码: 但是,如果要添加更多,则必须再添加一个循环。那么,我该如何使用递归呢?我尝试,我尝试,但是我真的做不到。请帮助并尽可能简单地发布示例。 谢谢。 问题答案: 这是一个简单的算法。从1迭代到2 count(array) -1。在每次迭代中,如果循环计数器的二进制表示形式中的第j位等于1,则在组合中包含第j个元素。 由于PHP需要能够将2个count(array

  • 我有一个json字符串,我需要验证它,并在json字符串中找到列表以外的任何其他键。示例json字符串为 如何使用从json字符串中获取所有键

  • 问题内容: 在我的数据集中,我有一个字段,用于存储用HTML标记的文本。通用格式如下: 我可以尝试通过以下方法解决问题: 但是,这不是严格的规则,因为 某些条目违反了W3C标准, 并且不包含标签。更糟的是, 可能会缺少结束标记 。因此,我需要为每个可能存在的开始和结束标记包括函数。 我想知道是否有比使用多个嵌套函数更好的方法来完成此任务。不幸的是,我在这种环境中只能使用的语言是SQL和Visual

  • 我试图只得到今年的数据,但我的“where子句”似乎有问题。但当我在where子句中输入特定年份时,它就起作用了。除了where子句之外,所有的东西都在工作。 我希望你们能帮我。

  • 本文向大家介绍通过+(字符串串联)运算符进行字符串串联。,包括了通过+(字符串串联)运算符进行字符串串联。的使用技巧和注意事项,需要的朋友参考一下 您可以使用Java的“ +”运算符来连接字符串。 示例 输出结果