Sql Server 行连接
Posted
技术标签:
【中文标题】Sql Server 行连接【英文标题】:Sql Server Row Concatenation 【发布时间】:2009-07-02 16:16:35 【问题描述】:我有一个表格(实际上是表格变量),其中包含数千行(大约 50k)行:
group (int) isok (bit) x y
20 0 1 1
20 1 2 1
20 1 3 1
20 0 1 2
20 0 2 1
21 1 1 1
21 0 2 1
21 1 3 1
21 0 1 2
21 1 2 2
将其拉回客户端是一项相当艰巨的任务(特别是因为 isok 有点)。我想做的是将其转换为以下形式:
group mask
20 01100
21 10101
而且可能会更进一步,将其编码为长等。
注意:当前存储数据的方式无法更改。
在 SQL Server 2005 中是否可能出现这种情况,如果可能的话,甚至在 2000 中(非常重要)?
编辑:我忘了说清楚原始表已经处于需要维护的隐式排序中,没有一列充当线性序列,而是排序是基于上述其他两列(整数)(x & y)
【问题讨论】:
是否有一列对位进行排序?因为没有一个就不能保证您的订单,如果订单很重要,您的口罩将失效。 很抱歉应该说清楚并将编辑 - 该表是为了开始,但目前没有列具有简单的线性序列。 没有“按顺序”的表,这是 SQL,而不是某些 ISAM 文件。您必须有一个订单列。期间。 【参考方案1】:您可以将位视为字符串('0'、'1')并部署此处描述的众多字符串聚合连接方法之一:http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
【讨论】:
即使每个组有数千行,这也能工作吗?谢谢。 是的,这就是优势。如果每组最多有 64 个,您可以使用 bigint 位运算,但除此之外,您必须使用字符串或 varbinary。但是你需要一个订单列。以上是关于Sql Server 行连接的主要内容,如果未能解决你的问题,请参考以下文章
使用 RANK 或 ROW_NUMBER 创建 Group-able ID 以在 SQL Server 中使用难以捉摸的顺序交替连接行值