首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pivot?

如何使用pivot?
EN

Stack Overflow用户
提问于 2009-12-12 05:39:59
回答 1查看 233关注 0票数 1

我试着在一张桌子上使用pivot来旋转(转置)桌子,但是我不知道怎么做。

我想知道它到底是怎么工作的。我发现了很多egs,但我不能理解它们是如何工作的。

Check this, e.g.

它是如何工作的,我只想将我的行转换成cols,再把cols转置成行,比如我有31个cols用于day1 day2,以此类推,直到第31天,还有一个外键EmpId现在我想要旋转day1 day2

代码语言:javascript
复制
EmpId Day1 Day2 Day3
----------
1       A   P     P
2       P   P     p

这里我想像这样旋转桌子

代码语言:javascript
复制
Exp   1  2  3 as EmpId
----------
Day1  A  P  ....
Day2  P  P  ...
Day3  P  P  ...

诸若此类

EN

回答 1

Stack Overflow用户

发布于 2010-01-14 00:42:15

我检查了你的技术帖子here,我发现你不想使用PIVOT,因为它只返回聚合结果。UNPIVOT将使您非常接近您正在寻找的内容,然后只需在表上为每一列执行连接。我用你给出的数据做了一个例子:

代码语言:javascript
复制
----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

运行上面的代码将返回:

代码语言:javascript
复制
Exp   1  2  3 as EmpId
----------
Day1  A  P  ....
Day2  P  P  ...
Day3  P  P  ...

我所知道的唯一另一种解决方案是动态SQL,它更慢,也有它的危险。但是,如果您只运行一次代码,也可以正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1891039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档