sqlserver STUFF行转列里面如何去重
时间: 2024-12-14 19:12:26 浏览: 5
SQL Server中的`STUFF()`函数主要用于将字符串中的连续重复字符替换为指定的字符,但它本身并不直接用于行转列并去重。如果你想要从行转换到列,并去除重复值,通常需要结合其他技术,比如`UNPIVOT`、`STRING_SPLIT`或者自连接。
假设你有一个包含重复值的列`Values`,可以尝试使用`UNION ALL`和`DISTINCT`来去重:
```sql
SELECT Value
FROM (
SELECT DISTINCT Value
FROM YourTable
UNPIVOT (Value FOR Position IN (', ' + Values + ', ') AS Unpivoted
) DistinctValues
```
这里假设`Values`列是以逗号分隔的字符串。`UNPIVOT`会把每行的每个值变成一行,然后`DISTINCT`会去掉重复的值。记得将`YourTable`替换为实际的表名。
如果你想基于某个标识字段去除重复,例如`ID`,可以这样做:
```sql
SELECT ID, Value
FROM (
SELECT ID, Value,
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY (SELECT NULL)) as RowNum
FROM YourTable
) t
WHERE RowNum = 1
```
这将保留每个`ID`下的第一条记录。
阅读全文