这是一个员工数据,我想使用数据透视将行数据转换为列

Posted

技术标签:

【中文标题】这是一个员工数据,我想使用数据透视将行数据转换为列【英文标题】:it is an employee data that i want to transpose row data into columns using pivot 【发布时间】:2020-12-23 16:58:49 【问题描述】:

我在下表中有数据

+----------------------------+
| empid empname city salary  |
+----------------------------+
| 1      a       chn 15000   |
| 2      a       chn 15000   |
| 3      b       bgl  25000  |
| 4      b       bgl  25000  |
| 5      c       hyd  30000  |
| 6      c       hyd  30000  |
+----------------------------+

对于上表,我必须将上面的行转换为列。我尝试使用枢轴功能,但我无法得到正确的答案。以下是输出

+--------------------------------------------+
| empname city Novembersalary Decembersalary |
+--------------------------------------------+
| a        chn   15000         15000         |
| b        bgl   25000         25000         |
| c        hyd    30000        30000         |
+--------------------------------------------+

我尝试了以下查询,但效果不佳,并且显示所有列都处于空状态:

select empname, city, november, december
from (select empname as ename,city as loc,salary from Employees) as srctable
pivot (avg(salary) for ename in(empname,city,november,december)) as pivottabel 

【问题讨论】:

向我们展示您的尝试以及您想要的输出 “我尝试使用数据透视函数,但无法得到正确答案。” 那是什么尝试。这不在您的问题中,因此我们无法告诉您为什么它不起作用。 PIVOT 也是一个运算符,而不是一个函数。 你从哪里得到日期?输入表不显示日期。 您错过了生效日期吗?我们怎么知道什么是 11 月或 12 月? @AbdulMalik:您的数据没有日期的概念,因此不清楚您如何在结果集中定义 11 月和 12 月。 【参考方案1】:

很抱歉,他们没有为输入表提供正确的日期。现在我得到了解决方案。下面是解决方法查询

select ename,loc, november, december
from (select empname as ename, city as loc,salary,datename(month,salarydate) as msalary
      from Employees) as srctable
pivot (avg(salary) for msalary in(emname,city,november,december)) as pivottabel;

感谢您的宝贵意见!!!!

【讨论】:

问题是您没有提到salarydate 列。您的第一个表的示例中缺少它。

以上是关于这是一个员工数据,我想使用数据透视将行数据转换为列的主要内容,如果未能解决你的问题,请参考以下文章

将行数据转换为列

SQL Server - Pivot 将行转换为列(带有额外的行数据)

在 SQL 中使用“Pivot”将行转换为列

如何将行数据查询为列?

Mysql查询根据两列动态将行转换为列

使用R将行转换为列,将列转换为行