将整个数据行转换为 SQL 中的列 header 或使用 SSIS

Convert entire data row into column header in SQL or using SSIS

我有一个从 excel 动态创建的 table,示例如下所示

F1     F2     F3     F4    F5
ColA   ColB   ColC   Week1 Week2
1      Mango  Fruit  5     6
2      Potato Veg    4     3
3      Grapes Fruit  4     4

在上面的例子中,F1F2是table的列。但是 ColAColB 是数据的实际列 header,并且 Week1Week2 不断变化

我需要把上面的数据转换成下面的格式:

ColA   ColB     ColC       Week      Qty
1      Mango    Fruit      Week1     5
1      Mango    Fruit      Week2     6
2      Potato   Veg        Week1     4
2      Potato   Veg        Week2     3
3      Grapes   Fruit      Week1     4
3      Grapes   Fruit      Week2     4

我为暂存 table 中的每一行生成了一个唯一 ID,并分别标识了 header 和数据行。然后我尝试在 SQL 和 SSIS 甚至动态 SQL 中使用 unpivot。但是我无法获得所需的输出并且我被卡住了。任何人都可以指导我一种方法,以便我可以进一步实施解决方案吗?

Unpivot 至少应该不是问题。试试这个:

create table tbl(F1 varchar(20),F2 varchar(20),F3 varchar(20),F4 varchar(20),F5 varchar(20))
insert into tbl values
('ColA','ColB','ColC','Week1','Week2'),
('1','Mango'  ,'Fruit','5','6'),
('2','Potato' ,'Veg','4','3'),
('3','Grapes' ,'Fruit','4','4')


SELECT F1 as ColA, F2 as ColB, F3 as ColC,week_no, quantity 
FROM
    (SELECT F1, F2, F3, F4, F5
     FROM tbl) iq
    UNPIVOT
    (quantity FOR Week_no IN(F4, F5)
    ) As wk1
WHERE F1 not in ('ColA')  //to filter out header

输出:

ColA   ColB       ColC        week_no    quantity
-----  -------    -------     --------   -----------
1      Mango      Fruit       week1      5
1      Mango      Fruit       week2      6
2      Potato     Veg         week1      4
2      Potato     Veg         week2      3
3      Grapes     Fruit       week1      4
3      Grapes     Fruit       week2      4

我创建了一个存储过程,它使用游标遍历我的第一个分段 table 的列,并创建了另一个转换后的 table。此 table 具有实际列 headers,在我之前的暂存 table.

中作为数据行存在

然后我使用 SQL unpivot 转置我的数据。

感谢@Prabhat G 对这个问题的分析。