2017-05-26 4 views
1

?私は、下記のように私はselect文から、インサートを使用したいその後、このSQL Serverの行を複数の列に転記するにはどうすればよいですか?私は複数の列にデータのSQL Serverの行を転置するにはどうすればよい

[STOCK NO]  [bomRev]  [bomEntry] [partId] [qty] [cmnt] [srcLoc] [dType] [lead] [lineNbr] 
700349L    A    1   600446 1  `TEST` TEST  0   0  1 
700349L    A    2   201743 1  `TEST` TEST  0   0  2 
700349L    A    3   100208 1  `TEST` TEST  0   0  3 
700349L    A    4   300219 1  `TEST` TEST  0   0  4 

700349L    A    5   400533 1  `TEST` TEST  0   0  5 

700349L    A    6   100218 1  `TEST` TEST  0   0  6 
700349L    A    7   100222 1  `TEST` TEST  0   0  7 
700349L    A    8   100220 1  `TEST` TEST  0   0  8 
700349L    A    9   100221 1  `TEST` TEST  0   0  9 

のようなものを見たいデータに

 [STOCK NO]  [PN1]   [PN2]    [PN3]   [PN4]       [PN4]   [PN5]   [PN6]  [PN7]  [PN8]     [PN9] [PN10] [PN11] [PN12] [Qty] 
    700349L   600446   201743   100208          300219   400533     100280  100218     100222   100220 100221  1 

下記のショーのようなものを持っているが、私は、複数の行を転置したいです列

INSERT INTO [DT]([bomItem], [bomRev], [bomEntry], [partId], [qty], [cmnt],[srcLoc], [dType], [lead], [lineNbr]) 
    SELECT 
     [STOCK NO], 'A', [bomEntry], [partid], [qty], 'TEST', 'TEST', '0', '0', [lineNbr] 
    FROM 
     [ST] 

skip if blank

+0

が重複する可能性が値を持つ行のみ数にあなたの列とrow_number()をアンピボットしcross apply()を使用して

列の和に/ピボット行(https://stackoverflow.com/questions/18322488/transpose-pivot-rows-to-columns-and-sum)および[SQL合計 - ピボットコラム】(https://stackoverflow.com/q/25293671/62576) –

答えて

0

これは、従来問題となっている追加の編集に列とサンプルデータを使用しています。

--INSERT INTO [DT]([bomItem], [bomRev], [bomEntry], [partId], [qty], [cmnt],[srcLoc], [dType], [lead], [lineNbr]) 
select 
    st.[CALC STOCK NO]  
    , bomRev = 'A' 
    , bomEntry = row_number() over (order by u.ordinal) 
    , u.Partid 
    , st.Qty 
    , cmnt = 'Test' 
    , srcLoc = 'Test' 
    , dType = '0' 
    , lead = '0' 
    , lineNbr = row_number() over (order by u.ordinal) 
from st 
    cross apply (values 
    (1,[BOM WHEEL PN]) 
    ,(2,[BOM TIRE PN]) 
    ,(3,[BOM VALVE PN]) 
    ,(4,[BOM - SECONDARY DISC PN]) 
    ,(5,[BOM - DISC]) 
    ,(6,[BOM - RIM]) 
    ,(7,[BUY WHEEL]) 
    ,(8,[COLOR PN]) 
    ,(9,[WHL BOM PART 1 PN]) 
    ,(10,[WHL BOM PART 2 PN]) 
    ,(11,[WHL BOM PART 3 PN]) 
    ,(12,[WHL BOM PART 4 PN]) 
    ,(13,[WHL BOM PART 5 PN]) 
) u (ordinal, partId) 
where nullif(u.partId,'') is not null 

rextesterデモ:http://rextester.com/XNGB57562

リターン:[トランスポーズの

+---------------+--------+----------+--------+-----+------+--------+-------+------+---------+ 
| CALC STOCK NO | bomRev | bomEntry | Partid | Qty | cmnt | srcLoc | dType | lead | lineNbr | 
+---------------+--------+----------+--------+-----+------+--------+-------+------+---------+ 
| 700349L  | A  |  1 | 600446 | 1 | Test | Test |  0 | 0 |  1 | 
| 700349L  | A  |  2 | 201743 | 1 | Test | Test |  0 | 0 |  2 | 
| 700349L  | A  |  3 | 100208 | 1 | Test | Test |  0 | 0 |  3 | 
| 700349L  | A  |  4 | 300219 | 1 | Test | Test |  0 | 0 |  4 | 
| 700349L  | A  |  5 | 400533 | 1 | Test | Test |  0 | 0 |  5 | 
| 700349L  | A  |  6 | 100280 | 1 | Test | Test |  0 | 0 |  6 | 
| 700349L  | A  |  7 | 100218 | 1 | Test | Test |  0 | 0 |  7 | 
| 700349L  | A  |  8 | 100222 | 1 | Test | Test |  0 | 0 |  8 | 
| 700349L  | A  |  9 | 100220 | 1 | Test | Test |  0 | 0 |  9 | 
| 700349L  | A  |  10 | 100221 | 1 | Test | Test |  0 | 0 |  10 | 
+---------------+--------+----------+--------+-----+------+--------+-------+------+---------+ 
+0

はありがとうございました!! 2つのもの1.私はトリガーを作成するために挿入されたテーブルを使用できますか? 2.どうすれば無視することができます/空白の場合はスキップするパートiは表示する画像を追加しました – user8066749

+0

@ user8066749空の文字列を 'u(null) partidはnullではありません。私はまた、あなたが記述しているテーブルに挿入するために使用できるクエリの前にコメントアウトされた 'insert'ステートメントを含めました。 – SqlZim

+0

ありがとうございました!!!私はトリガーを作成するために 'st'の代わりに挿入することができますか? – user8066749

関連する問題