2017-04-05 15 views
0

1つの列を複数の列に分割し、いくつかの列を結合したいと考えています。 SQL Server 2012での変更はどのように行うことができますか?SQL Server 2014:1つの列から複数の列への行が少なく、テーブルをピボットする方法は?

入力

| Cust | Q  | Val  | 
------------------------------------ 
| 1  | 1  | 10  | 
| 2  | 2  | 20  | 
| 1  | 2  | 30  | 
| 4  | 4  | 40  | 
| 4  | 1  | 400  | 
| 4  | 2  | 4000 | 

出力:どのようにここに入力から取得しますか?

| Cust | ValQI | ValQII | ValQIII | VALQIV | 
----------------------------------------------------------------- 
| 1  | 10 | 30  |    |    | 
| 2  |   | 20  |    |    | 
| 3  |   |   |    |    | 
| 4  | 400 | 4000 |    |  40  | 
+0

いくつかの異なるval Qのues? – etsa

+0

@etsaには毎年4四半期があり、10年には40四半期のように続きます。 – hhh

+0

cust 3でどのように出力されますか?私はCust 3で1レコードが入力に欠けていると思いますか? –

答えて

2

コンバインドPIVOT LEFT OUTERは

を登録しよう
WITH C AS 
(
    SELECT * 
    FROM (VALUES (1), (2), (3), (4)) AS T(Cust) 
) 
SELECT C.Cust, [1] AS ValQI, [2] AS ValQII, [3] AS ValQIII, [4] AS ValQIV 
FROM C 
LEFT OUTER JOIN 
(
    SELEcT * 
    FROM 
    (VALUES 
     (1, 1, 10), 
     (2, 2, 20), 
     (1, 2, 30), 
     (4, 4, 40), 
     (4, 1, 400), 
     (4, 2, 4000) 
    ) AS T(Cust, Q, Val) 
    PIVOT (MAX([Val]) FOR [Q] IN ([1], [2], [3], [4])) AS P 
) AS TT ON C.Cust = TT.Cust 
+0

「最大」が何であるか説明できますか?私はそれがなぜあるのか疑問に思っているので、このケースは値の最大値を取っていません。 – hhh

+1

PIVOTは内部的にGROUP BYを実行します。どのようにグループ内の価値を拾うのだろうか?あなたのケースでは、重複がないので、MIN/MAX/SUM/AVERAGEになります。 – qxg

+0

私は110あなたは、SELECT名前 'によってダブルチェックの互換性レベルでしsys.databases FROM compatibility_levelである90は、2005年と2012年のだと思います;'とhttps://docs.microsoft.com/en-us/sql/t-をチェックsql/statements/alter-database-transact-sql-compatibility-level? – qxg

0

あなたは、SQL Serverでこのようなデータを転置するためにSQL Serverでピボットを使用することができます。..

;with cte as (
select cust, RowN = Row_Number() over (partition by cust order by q), val from #yourPivot) 
select * from cte 
pivot (max(val) for RowN in ([1],[2], [3],[4])) p 

ご入力テーブル:

create table #yourPivot (cust int, Q int, Val int) 

insert into #yourPivot (cust, q, val) values 
( 1 , 1  , 10  ) 
,( 2 , 2  , 20  ) 
,( 1 , 1  , 30  ) 
,( 4 , 4  , 40  ) 
,( 4 , 1  , 400 ) 
,( 4 , 2  , 4000 ) 
関連する問題