在没有循环的情况下在单个列中连接记录?

Jam*_*ers 4 mysql sql t-sql sql-server

我有一个包含1列varchar值的表.如果可能的话,我正在寻找一种方法将这些值连接成一个没有循环的值.如果一个循环是解决这个问题的最有效的方法,那么我将采用这种方式,但我认为在默认为该方法之前我会要求其他选项.我还想将其保留在SQL查询中.

最终,我想做一个分裂功能的反面.

是否可以不使用循环(或游标),或者我应该使用循环来实现这一点?

编辑:因为有一个非常好的答案与如何在MySql中进行相关(与我最初的MS Sql相反),我决定重新录制,以便其他人也可以找到答案.

Nik*_*l S 6

声明@concat varchar(max)set @concat =''

从tablename1中选择@concat = @concat + col1 +','

  • 使用此方法时,您无法使用订单.您可以使用FOR XML PATH,就像在我的回答中一样.但是,FOR XML PATH适用于SQL Server 2005及更高版本 (3认同)

KM.*_*KM. 6

试试这个:

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, ''
         )
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

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

(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)