我正在尝试使用表格上的数据旋转(转置)表格,但我不知道如何做到这一点。
我想知道它是如何运作的。 我找到了许多自我,但我无法理解这些是如何工作的。
如何工作,我只想将我的行转换为cols和cols成行 假设我在第1天第2天有31个col,依此类推,直到第31天和一个外键EmpId 现在我想转动第1天2天
EmpId Day1 Day2 Day3
----------
1 A P P
2 P P p
这里我想像这样旋转表
Exp 1 2 3 as EmpId
----------
Day1 A P ....
Day2 P P ...
Day3 P P ...
等等
答案 0 :(得分:2)
我检查了你的技术帖子here,我发现你不想使用PIVOT,因为它只返回聚合结果。 UNPIVOT会让你非常接近你正在寻找的东西,然后只需在桌子上为每一列做一个连接。我用下面给出的数据做了一个例子:
----Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (EmpId int, Day1 char(1), Day2 char(1), Day3 char(1));
CREATE TABLE pvt2 (EmpId int, DayNum CHAR(4), DayNums CHAR(4));
GO
INSERT INTO pvt VALUES (1,'A','P','P');
INSERT INTO pvt VALUES (2,'P','P','P');
GO
--Unpivot the table.
INSERT INTO pvt2
SELECT EmpId,DayNum, DayNums
FROM
(SELECT EmpId, Day1, Day2, Day3
FROM pvt) p
UNPIVOT
(DayNums FOR DayNum IN
(Day1,Day2,Day3)
)AS unpvt;
GO
SELECT
a.DayNum,
a.DayNums,
b.DayNums
FROM pvt2 a
JOIN pvt2 b ON a.DayNum = b.DayNum
AND a.EmpId=1
AND b.EmpId = 2
运行上面的代码将返回:
Exp 1 2 3 as EmpId
----------
Day1 A P ....
Day2 P P ...
Day3 P P ...
我所知道的唯一其他解决方案是动态SQL,而且速度较慢且存在危险。但是,如果您正在运行一次也可以运行的代码。