【问题标题】:How can i use pivot?我如何使用枢轴?
【发布时间】:2010-01-14 00:42:15
【问题描述】:

我正在尝试在表格上使用枢轴来旋转(转置)表格,但我不知道如何做到这一点。

我想知道它实际上是如何工作的。 我发现了很多 egs,但我无法理解它们是如何工作的。

Check this, e.g.

tis 是如何工作的,我只想将我的行转换为 cols 并将 cols 转换为行 假设我在第 1 天第 2 天有 31 个列,依此类推,直到第 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  ...

等等

【问题讨论】:

  • 您可能想详细说明您想要完成的任务...

标签: sql sql-server sql-server-2005


【解决方案1】:

我检查了您的技术帖子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,它速度较慢且存在危险。但是,如果您只运行一次代码,也可以工作。

【讨论】:

  • 感谢本回答,因为这个问题仍然对我开放。我没有得到任何解决方案b4。稍后会看到你的答案
猜你喜欢
  • 2021-12-12
  • 2019-04-04
  • 2016-03-06
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
相关资源
最近更新 更多