我有水平臺(表1),我需要它將它轉變成(表2)水平數據轉換成垂直
表1:
CEO SALESMAN PRODUCT(1) PRODUCT(2) PRODUCT(3) PRODUCT(4) PRODUCT(5) ... PRODUCT(N)
------ ---------- ---------- ---------- ---------- ---------- ---------- ----------
MIKE ANDERSON 76787,00 19388,00 0,00 2723,00 217,00 6581,00
JOHN ANGELA 0,00 0,00 73088,00 0,00 0,00 0,00
JACK JEFF 24716,00 0,00 2995,00 0,00 0,00 0,00
STUART MICHAEL 0,00 23338,00 42656,00 0,00 0,00 0,00
表2:
CEO SALESMAN PRODUCTS VALUE
------- ----------- ---------- --------
MIKE ANDERSON PRODUCT(1) 76787,00
JOHN ANGELA PRODUCT(1) 0,00
JACK JEFF PRODUCT(1) 24716,00
STUART MICHAEL PRODUCT(1) 0,00
MIKE ANDERSON PRODUCT(2) 19388,00
JOHN ANGELA PRODUCT(2) 0,00
JACK JEFF PRODUCT(2) 0,00
STUART MICHAEL PRODUCT(2) 23338,00
MIKE ANDERSON PRODUCT(3) 0,00
JOHN ANGELA PRODUCT(3) 73088,00
JACK JEFF PRODUCT(3) 2995,00
STUART MICHAEL PRODUCT(3) 42656,00
MIKE ANDERSON PRODUCT(4) 2723,00
JOHN ANGELA PRODUCT(4) 0,00
JACK JEFF PRODUCT(4) 0,00
STUART MICHAEL PRODUCT(4) 0,00
MIKE ANDERSON PRODUCT(5) 217,00
JOHN ANGELA PRODUCT(5) 0,00
JACK JEFF PRODUCT(5) 0,00
STUART MICHAEL PRODUCT(5) 0,00
MIKE ANDERSON ... ...
JOHN ANGELA ... ...
JACK JEFF ... ...
STUART MICHAEL ... ...
MIKE ANDERSON PRODUCT(N) 6581,00
JOHN ANGELA PRODUCT(N) 0,00
JACK JEFF PRODUCT(N) 0,00
STUART MICHAEL PRODUCT(N) 0,00
我到目前爲止所嘗試的是將BULK INSERT Table1放入一個臨時表中,然後處理這些數據,直到我得到我想要。問題是PRODUCT()列中的N是可變的,所以我不能創建一個包含固定列的臨時表,我需要一個動態查詢,以某種方式讀取產品列的數量並使用它。
BULK INSERT
BULK INSERT #temp
FROM '\\path\file.csv'
WITH
(
FIRSTROW = 1,
FIELDTERMINATOR= ';',
ROWTERMINATOR = '\n',
CODEPAGE='RAW'
);
臨時表:
CREATE TABLE #temp(
col1 varchar(100) null,
col2 varchar(100) null,
col3 varchar(100) null,
col4 varchar(100) null,
col5 varchar(100) null,
...
col397 varchar(100) null,
col398 varchar(100) null,
col399 varchar(100) null,
col400 varchar(100) null
)
當我運行BULK INSERT我得到這個錯誤:
Msg 4832, Level 16, State 1, Line 1
Bulk load: An unexpected end of file was encountered in the data file.
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
這是因爲我創造一個溫度具有固定400列的文件表,並且有127個產品列。
我試圖避免像這些東西:
DECLARE @NUM_ROWS INT
SET @NUM_ROWS = 123
IF @NUM_ROWS = 1
BEGIN
CREATE TABLE #temp(
col1 varchar(100) null
)
END
IF @NUM_ROWS = 2
BEGIN
CREATE TABLE #temp(
col1 varchar(100) null,
col2 varchar(100) null,
)
END
...
IF @NUM_ROWS = 400
BEGIN
CREATE TABLE #temp(
col1 varchar(100) null,
col2 varchar(100) null,
...
col4 varchar(100) null,
)
END
BULK INSERT #temp
FROM '\\path\file.csv'
WITH
(
FIRSTROW = 1,
FIELDTERMINATOR= ';',
ROWTERMINATOR = '\n',
CODEPAGE='RAW'
);
@NUM_ROWS將列數我將創建臨時表。
有誰知道一種方式,我可以將這個.csv文件動態導入到SQL Server中?動態地,我的意思是創建一個臨時表與我批量插入的產品列的數量。或者避免我上面發佈的錯誤的解決方法。
你能做到在加載之前對csv文件進行任何手動操作?還是這個過程需要100%自動化? – PowerUser
當然,我可以在之前操作.csv文件。其實,之前操縱它會更好。我已經搜索過操縱它,並且在粘貼值時發現了轉置,但它沒有幫助。 – Turque
這是一次性任務,還是需要重複? – podiluska