在PIVOT运营商中分组

时间:2017-04-10 12:57:47

标签: sql sql-server pivot

如何在PIVOT运算符中使用group by子句?

enter image description here

我尝试使用以下代码,但是我得到了空值,结果没有聚合。

select  EmpName, CHN,HYD FROM location
PIVOT (Sum(salary)  for EmpLoc in ([CHN], [HYD]))
AS 
pivottable 

我希望最终输出是这样的。

        CHN HYD
kunder  400 200
shetty  150 150

        CHN HYD Total
kunder  400 200 600
shetty  150 150 300
Total   550 350 900

3 个答案:

答案 0 :(得分:1)

只需添加派生列Total=CHN+HYD和子查询即可创建总行

Seq(虽然没有显示)会将Total行放在底部

Declare @YourTable table (EmpLoc varchar(25),EmpName varchar(25),Salary int)
Insert Into @YourTable values
('HYD','kunder',200)
,('HYD','shetty',150)
,('CHN','shetty',150)
,('CHN','kunder',200)
,('CHN','kunder',200)


Select EmpName, CHN,HYD,Total=CHN+HYD
 From ( 
        Select Seq=0,EmpLoc,EmpName,Salary From @YourTable
        Union All
        Select Seq=1,EmpLoc,'Total',Salary From @YourTable
      ) A
   pivot (sum(Salary) for EmpLoc in ([CHN], [HYD])) P 

返回

EmpName CHN HYD Total
kunder  400 200 600
shetty  150 150 300
Total   550 350 900

答案 1 :(得分:1)

Declare @YourTable table (EmpLoc varchar(25),EmpName varchar(25),Salary int)
Insert Into @YourTable values
('HYD','kunder',200)
,('HYD','shetty',150)
,('CHN','shetty',150)
,('CHN','kunder',200)
,('CHN','kunder',200)


;with cte as
(
SELECT * from 
            (
                select *  from @YourTable
           ) as y
            pivot 
            (
                 sum(salary)
                for EmpLoc in ([CHN], [HYD])
            ) as p
            )
SELECT   
    EmpName,sum(CHN)CHN ,sum(HYD)HYD 

FROM CTE  
GROUP BY EmpName;  

答案 2 :(得分:0)

使用您的示例中的代码来获得所需的结果我没有任何问题。我猜你的查询并不像你的例子那么简单,因此引入了其他未在此处显示的复杂情况。

您可能需要使用子查询和数据透视表,仅使用数据透视表所需的列,然后返回查询的其余部分,以使用pivot()获取您要查找的结果。

使用条件聚合可能是一个更简单的解决方案:

select 
    empname
  , CHN = sum(case when emploc = 'CHN' then salary else 0 end)
  , HYD = sum(case when emploc = 'HYD' then salary else 0 end)
  --, Total = sum(salary) /* Optional total */
from location
group by empname

rextester演示:http://rextester.com/LYRH81756

返回:

+---------+-----+-----+
| EmpName | CHN | HYD |
+---------+-----+-----+
| kunder  | 400 | 200 |
| shetty  | 150 | 150 |
+---------+-----+-----+