sqlsever 如何用with函数实现行专列
时间: 2024-12-18 08:25:26 浏览: 7
在SQL Server中,`WITH` (Common Table Expression, 公共表表达式) 是一个临时的结果集,它允许你在查询中定义并多次引用一个复杂的子查询。如果你想通过`WITH`实现行转列(即数据从一列拆分为多列),可以使用`UNION ALL` 或 `CROSS APPLY` 结合`VALUES`构造。
例如,假设你有一个名为`Orders`的表,其中有一个`ProductCategory`列,你想将这个分类信息转换为单独的列,可以这样做:
```sql
WITH CTE_RowsToColumns AS (
SELECT OrderID, ProductCategory,
ROW_NUMBER() OVER(ORDER BY OrderID) AS RowNum
FROM Orders
)
SELECT OrderID,
ProductCategory AS Category1
FROM CTE_RowsToColumns
WHERE RowNum = 1
UNION ALL
SELECT OrderID,
NULLIF(ProductCategory, '') + '_Category' + CAST(RowNum AS VARCHAR) AS Category
FROM CTE_RowsToColumns
WHERE RowNum > 1
```
在这个例子中,首先创建了一个包含`RowNum`的CTE,然后分别取了`RowNum`为1的数据作为第一列,后续的`RowNum`值则形成了新的列名。
阅读全文