首页 > 解决方案 > 尝试 SQL 动态反透视时如何解决错误

问题描述

你能帮忙看看我的错误吗?

原表:

在此处输入图像描述

目标表:

在此处输入图像描述

使用以下代码:

Select DATE,cities,sales
From Test
UNPIVOT
( sales
For cities in (city1, city2, city3)
) AS XYZ

结果是成功的。

但是,城市列表可能会变成 city4、city5 ......所以我试图使用动态 unpivot 来实现这一点

代码:

DECLARE @cols AS NVARCHAR(MAX);
select @cols = COALESCE(@cols + ',', '') + quotename(COLUMN_NAME)
From (  Select column_name
        FROM information_schema.columns
        WHERE table_name = 'Test'
        AND COLUMN_NAME <> 'Date' ) AS FiledList
Select DATE,cities,sales
From Test
UNPIVOT
( sales
For cities in (@cols)
) AS XYZ

在此处输入图像描述

似乎有错误,并尝试了几种方法,均无效。

标签: sqlsql-servertsqlpivot

解决方案


您可能需要考虑更改数据库,以便首先对其进行透视。一个包含日期、城市和销售额的表格将更适合添加城市,并且首先不需要取消透视,假设您正在这样做启用聚合。否则,您将需要动态创建 SQL,这远非理想。


推荐阅读