我有一个VARCHAR值的1列的表。 我正在寻找一种方式,如果可能的话,来连接这些值转换成一个单一的值没有环。 如果循环是要对这个最有效的方式,然后我会走那条路,但想我会要求其他选项默认为该方法之前。 我也想保持这个SQL查询的内部。
最后,我希望做一个分割功能相反。
是否有可能没有环(或光标)做,或者我应该只使用一个循环来实现这一目标?
编辑:既然是用如何做到这一点在MySQL相关的(而不是MS SQL像我最初打算)一个很好的答案,我决定重新标记,以便其他人也许能找到答案为好。
我有一个VARCHAR值的1列的表。 我正在寻找一种方式,如果可能的话,来连接这些值转换成一个单一的值没有环。 如果循环是要对这个最有效的方式,然后我会走那条路,但想我会要求其他选项默认为该方法之前。 我也想保持这个SQL查询的内部。
最后,我希望做一个分割功能相反。
是否有可能没有环(或光标)做,或者我应该只使用一个循环来实现这一目标?
编辑:既然是用如何做到这一点在MySQL相关的(而不是MS SQL像我最初打算)一个很好的答案,我决定重新标记,以便其他人也许能找到答案为好。
声明@concat VARCHAR(最大)设定@concat = ''
从tablename1选择@concat = @concat + COL1 + ''
试试这个:
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)
我只是解决一个问题像这样和循环永远了。 所以,我在concantenated演示介质(在这种情况下的Crystal Reports)的值,这是非常快的。
只是一个想法。
如果是MySQL,你可以使用GROUP_CONCAT
选择一个,GROUP_CONCAT(B SEPARATOR '')FROM表GROUP BY A;
现在大概过时,但看看亚当Machanic的帖子的话题 。
而这其中肯定是过时的; 我在2004年写的 。
为什么我更喜欢“保持它的SQL查询中”的功能? 因为你可能需要做一次于此。 为什么不封装代码到一个单独的模块,而不是重复它所有的地方吗?