sql server2008 逗号分裂行转列
时间: 2024-09-12 14:14:53 浏览: 66
SQL Server 2008中,将逗号分隔的行转换为列的过程通常涉及到使用一些技巧和函数,因为SQL Server 本身不提供直接转换的功能。以下是通过创建临时表、使用XML方法和CROSS APPLY来实现逗号分裂行转列的一个基本示例:
首先,假设我们有一个包含逗号分隔值的列,我们希望将其拆分成多行并分配到不同的列中。下面是一个简单的SQL脚本,用于演示如何实现这一功能:
```sql
-- 创建示例数据表
CREATE TABLE TestTable (ID INT, CommaSeparatedValues NVARCHAR(MAX));
-- 插入示例数据
INSERT INTO TestTable VALUES (1, 'apple,banana,cherry');
INSERT INTO TestTable VALUES (2, 'dog,elephant,fox');
-- 使用XML方法转换逗号分隔的字符串为单独的行
WITH Split(stpos,endpos)
AS(
SELECT 0 AS stpos, CHARINDEX(',', CommaSeparatedValues) AS endpos
FROM TestTable
UNION ALL
SELECT endpos+1, CHARINDEX(',', CommaSeparatedValues, endpos+1)
FROM Split
WHERE endpos > 0
),
SplitValues
AS(
SELECT ID, SUBSTRING(CommaSeparatedValues, stpos, COALESCE(NULLIF(endpos,0), LEN(CommaSeparatedValues)+1)-stpos) AS Value
FROM TestTable, Split
)
SELECT *
INTO #TempTable
FROM SplitValues;
-- 使用PIVOT将行转换为列
SELECT *
FROM
(
SELECT ID, Value FROM #TempTable
) AS SourceTable
PIVOT
(
MAX(Value)
FOR ID IN ([1], [2]) -- 这里的数字代表列的标题
) AS PivotTable;
```
这个过程包括以下几个步骤:
1. 使用WITH语句创建一个递归的公用表表达式(CTE),用于拆分行中的逗号分隔值。
2. 从递归CTE中选择数据,并将它们插入到一个临时表中。
3. 使用PIVOT函数将临时表中的行数据转换为列。
阅读全文