【问题标题】:Pivot and concatenate values from column in SQL Server从 SQL Server 中的列中透视和连接值
【发布时间】:2016-03-01 13:24:42
【问题描述】:

我有这些列的表格:

ID | Name  | Value
------------------
 1 | Test1 | 0
 2 | Test2 | 1
 3 | Test3 | 0
 4 | Test4 | 0
 5 | Test5 | 1

我希望将旋转和连接的值列作为字符串

01001

【问题讨论】:

标签: sql-server pivot


【解决方案1】:

使用FOR XML 连接。重要的是您还包括一个 ORDER BY。否则,您将无法控制值的顺序,并且可能会出现任意顺序的风险。

SELECT 
  (SELECT CAST([VALUE] AS CHAR(1)) 
   FROM yourtable
   ORDER BY ID
   FOR XML PATH ('')
  )

【讨论】:

  • 干净,简单,喜欢它:)
【解决方案2】:

下面的代码将给出预期的结果:

SELECT @Result = @Result + CAST(VALUE AS VARCHAR)
FROM #TmpTestingTable

或者你可以使用STUFF:

SELECT STUFF(
    (   SELECT CAST(VALUE AS VARCHAR) 
        FROM #TmpTestingTable
        FOR XML PATH ('')
    ), 1, 0, '')

作为示例,我将列插入到临时表中并执行代码。

CREATE TABLE #TmpTestingTable (ID INT, Name VARCHAR (20), Value INT)

INSERT INTO #TmpTestingTable (ID, Name, Value) VALUES
(1 , 'Test1' , 0),
(2 , 'Test2' , 1),
(3 , 'Test3' , 0),
(4 , 'Test4' , 0),
(5 , 'Test5' , 1)

DECLARE @Result AS VARCHAR (100) = '';

-- using variable approach
SELECT @Result = @Result + CAST(VALUE AS VARCHAR)
FROM #TmpTestingTable

SELECT @Result

-- using STUFF approach
SELECT STUFF(
    (   SELECT CAST(VALUE AS VARCHAR) 
        FROM #TmpTestingTable
        FOR XML PATH ('')
    ), 1, 0, '')

DROP TABLE #TmpTestingTable

【讨论】:

  • 将连接称为 STUFF 方法 确实具有误导性。你所有的东西都是用空字符串替换第一个字符
【解决方案3】:
SELECT GROUP_CONCAT(Value SEPARATOR '') FROM Table

编辑:

无法在 SQL Server 上运行。看看Simulating group_concat MySQL function in Microsoft SQL Server 2005? 尝试让它工作

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
相关资源
最近更新 更多