2017-04-10 5 views
2

PIVOT演算子でgroup by句を使用するにはどうすればよいですか?PIVOT演算子でグループ化する

enter image description here

私は次のコードで試してみましたが、私は、null値を取得し、結果が集約された取得されていません。

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 
+0

で合計行を配置しますone – DenStudent

答えて

1

ちょうど作成する派生列Total=CHN+HYDサブクエリを追加合計行

配列(表示されていないけれども)は、CTEであなたのピボットを置き、その上、GROUP BYで文を書くことができます下

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 
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 | 
+---------+-----+-----+ 
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; 
+1

'row_number()'とは何ですか? – SqlZim

+0

申し訳ありません@SqlZim私はそれを削除しています – Chanukya

+0

row_number()もうまくいきます。 – santhosha

関連する問題