串联在一列中记录,而不循环?(Concatenating records in a single c

2019-08-21 03:05发布

我有一个VARCHAR值的1列的表。 我正在寻找一种方式,如果可能的话,来连接这些值转换成一个单一的值没有环。 如果循环是要对这个最有效的方式,然后我会走那条路,但想我会要求其他选项默认为该方法之前。 我也想保持这个SQL查询的内部。

最后,我希望做一个分割功能相反。

是否有可能没有环(或光标)做,或者我应该只使用一个循环来实现这一目标?

编辑:既然是用如何做到这一点在MySQL相关的(而不是MS SQL像我最初打算)一个很好的答案,我决定重新标记,以便其他人也许能找到答案为好。

Answer 1:

声明@concat VARCHAR(最大)设定@concat = ''

从tablename1选择@concat = @concat + COL1 + ''



Answer 2:

试试这个:

DECLARE @YourTable table (Col1 int)
INSERT INTO @YourTable VALUES (1)
INSERT INTO @YourTable VALUES (2)
INSERT INTO @YourTable VALUES (30)
INSERT INTO @YourTable VALUES (400)
INSERT INTO @YourTable VALUES (12)
INSERT INTO @YourTable VALUES (46454)

SELECT
    STUFF(
             (
                  SELECT
                      ', ' + cast(Col1 as varchar(30))
                      FROM @YourTable
                      WHERE Col1<=400
                      ORDER BY Col1
                      FOR XML PATH('')
             ), 1, 2, ''
         )

OUTPUT:

-------------------
1, 2, 12, 30, 400

(1 row(s) affected)


Answer 3:

我只是解决一个问题像这样和循环永远了。 所以,我在concantenated演示介质(在这种情况下的Crystal Reports)的值,​​这是非常快的。

只是一个想法。



Answer 4:

如果是MySQL,你可以使用GROUP_CONCAT

选择一个,GROUP_CONCAT(B SEPARATOR '')FROM表GROUP BY A;



Answer 5:

现在大概过时,但看看亚当Machanic的帖子的话题 。

而这其中肯定是过时的; 我在2004年写的 。

为什么我更喜欢“保持它的SQL查询中”的功能? 因为你可能需要做一次于此。 为什么不封装代码到一个单独的模块,而不是重复它所有的地方吗?



文章来源: Concatenating records in a single column without looping?