PIVOT XML 使用子查询
时间: 2023-07-20 19:20:25 浏览: 49
可以使用子查询来在 PIVOT XML 中生成动态的列。
举个例子,假设有以下的表格:
```
CREATE TABLE Sales (
SalesID INT PRIMARY KEY,
ProductName VARCHAR(50),
SalesYear INT,
SalesAmount DECIMAL(10, 2)
);
INSERT INTO Sales VALUES
(1, 'Product A', 2019, 100.00),
(2, 'Product B', 2019, 200.00),
(3, 'Product A', 2020, 150.00),
(4, 'Product B', 2020, 250.00);
```
我们可以使用以下的查询来将年份作为列,产品名称作为行:
```
SELECT ProductName,
[2019] AS Sales2019,
[2020] AS Sales2020
FROM
(
SELECT ProductName,
SalesYear,
SalesAmount
FROM Sales
) AS SourceTable
PIVOT
(
SUM(SalesAmount)
FOR SalesYear IN ([2019], [2020])
) AS PivotTable;
```
现在,如果我们想要将所有的年份作为列,而不是手动指定列名,我们可以使用子查询来生成动态的列:
```
SELECT ProductName,
PivotColumns
FROM
(
SELECT ProductName,
SalesYear,
SalesAmount
FROM Sales
) AS SourceTable
PIVOT
(
SUM(SalesAmount)
FOR SalesYear IN (
SELECT DISTINCT CAST(SalesYear AS VARCHAR(4))
FROM Sales
ORDER BY SalesYear
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
) AS PivotTable (PivotColumns);
```
在这个查询中,我们使用了子查询来生成一个 XML 字符串,包含所有的年份。然后,我们将这个 XML 字符串传递给 PIVOT XML 子句中的 FOR 子句,从而生成动态的列。最后,我们使用一个别名 PivotColumns 来引用这些列。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)