2016-07-20 4 views
-1

私はいくつかの列を持つテーブルを持っているので、別のテーブルの列として列の値を変換したい。新しいテーブル内の列に行を変換する

私は自分の要件の1つのスクリーンショットを添付しています。

上の表は私のメインテーブルです。表1と以下は私の必要なテーブルです。 enter image description here ありがとう

+0

ケーススタント –

+0

@Jensを使用して、mysql raw to columnを簡単にピボットできます。間違って私はSQL Server 2012を使用しています。 –

+1

[効率的にSQL Serverの列に行を変換します。](http:// stackoverflow。 com/questions/15745042/rows-to-columns-in-sql-server) – Ash

答えて

0

私はピボット推測十分でしょう(おおや画像を投稿しないでくださいDDLが理解し、私たちはタイピングおよび/または推測保存している。。):

SELECT * 
FROM (
    SELECT [Action], [Key], 'Old' + Old as [a], OldValue as [Value] 
    FROM Table1 
    UNION ALL 
    SELECT [Action], [Key], 'New' + New, NewValue 
    FROM Table1 
    ) as p 
PIVOT (
    MAX([Value]) FOR [a] IN ([OldCol1],[OldCol2],[OldCol3],[NewCol1],[NewCol2],[NewCol3],[NewCol45]) 
) as pvt 

出力:その後、「Old多くはNew`値がある場合

Action Key OldCol1 OldCol2 OldCol3 NewCol1 NewCol2 NewCol3 NewCol45 
I  123 NULL NULL NULL NULL NULL NULL Sun 
U  123 Dog  Cat  Honey Dog  Mouse Bee  NULL 

あなたは、動的SQLが必要

+0

それは働いていて、今私はどこで私の間違いだったか知っています。 –

+0

私の答えがあなたを助けてくれたら大丈夫です! :) – gofr1

1

提案された複製があなたのところに届く間に、実際にはピボット解除してピボットする必要があります。

CREATE TABLE #Test(Action char, [Key] INT, Old varchar(5), OldValue varchar(5), New varchar(5), NewValue varchar(5)); 

INSERT INTO #Test VALUES 
('U', 123, 'Col1','Dog','Col1','Dog'), 
('U', 123, 'Col2','Cat','Col2','Mouse'), 
('U', 123, 'Col3','Honey','Col3','Bee'), 
('I', 123, NULL,NULL,'Col45','Sun'); 


SELECT PVT.Action 
     ,PVT.[Key] 
     ,PVT.OldCol1 
     ,PVT.OldCol2 
     ,PVT.OldCol3 
     ,PVT.NewCol1 
     ,PVT.NewCol2 
     ,PVT.NewCol3 
     ,PVT.NewCol45 FROM (
SELECT [Action] 
     ,[Key] 
     ,Label 
     ,Value 
FROM #Test 
CROSS APPLY (VALUES ('Old'+Old, OldValue), ('New'+New, NewValue)) c(label, value) 
)src 
PIVOT 
(
MAX(VALUE) FOR Label IN (OldCol1, NewCol1, OldCol2, NewCol2, OldCol3, NewCol3, NewCol45) 
)PVT 
ORDER BY PVT.Action Desc 


Action Key   OldCol1 OldCol2 OldCol3 NewCol1 NewCol2 NewCol3 NewCol45 
------ ----------- ------- ------- ------- ------- ------- ------- -------- 
U  123   Dog  Cat  Honey Dog  Mouse Bee  NULL 
I  123   NULL NULL NULL NULL NULL NULL Sun 

(2 row(s) affected) 
+0

これも動作していますが、grof1のソリューションは、どこで止まっていたかのようなものでした。とにかくありがとう –

関連する問題