这是一个员工数据,我想使用数据透视将行数据转换为列
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
列。您的第一个表的示例中缺少它。以上是关于这是一个员工数据,我想使用数据透视将行数据转换为列的主要内容,如果未能解决你的问题,请参考以下文章