我试着在一张桌子上使用pivot来旋转(转置)桌子,但是我不知道怎么做。
我想知道它到底是怎么工作的。我发现了很多egs,但我不能理解它们是如何工作的。
Check this, e.g.
它是如何工作的,我只想将我的行转换成cols,再把cols转置成行,比如我有31个cols用于day1 day2,以此类推,直到第31天,还有一个外键EmpId现在我想要旋转day1 day2
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 ...诸若此类
发布于 2010-01-14 00:42:15
我检查了你的技术帖子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,它更慢,也有它的危险。但是,如果您只运行一次代码,也可以正常工作。
https://stackoverflow.com/questions/1891039
复制相似问题