2012-11-30 46 views
0

我需要從Excel工作表中更新一個SQL表格,每次從製造設備捕獲數據時,我都可以通過創建一個存儲過程來執行此操作,該存儲過程可以使用JScript由捕獲數據並將其寫入Db的程序運行。來自Excel列的SQL更新

我現在能夠查詢Excel工作表並查看我需要的數據,但格式化有點困難,沒有運行查詢來逐行分隔數據行,然後我無法更新想想如何更新它。

查詢針對片:

SELECT Item, L05, L08, L09, SS1, SS2, SS3 
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY F8) AS rownumber, F1 AS Item, F2 AS L05, F3 AS L08, 4 AS L09, F5 AS SS1, F6 AS SS2, F7 AS SS3 
    FROM OpenDataSource('Microsoft.ACE.OLEDB.12.0', 
    'Data Source="C:\Job.xlsx";Extended Properties="Excel 12.0 XML;HDR=NO";')..."'Job Details$'") AS T2 
    Where rownumber >= 5 AND rownumber<=8 

返回:

Item L05  L08  L09  SS1  SS2  SS3 
WO 806314 806334  806618 806314 805886 807031 
TE TE2-05712 TE2-04481 TE2-06364 TE2-06345 TE2-06362 TE2-04420 
TF TF2-10874 TF2-07754A TF2-14249 tf2-10874 TF2-12635 TF2-12468 
Qty 39144  82800  127200 36348  121800 50660 

每個設備行是一列,每個數據項是在片材的行,我需要引用的值和更新看起來像這樣的表格:

LINE  WO  TE  TF  Qty 
Line05 NULL NULL NULL NULL 
Line08 NULL NULL NULL NULL 
Line09 NULL NULL NULL NULL 
SS1  NULL NULL NULL NULL 
SS2  NULL NULL NULL NULL 
SS3  NULL NULL NULL NULL 

理想情況下,由於表單是固定的,我可以引用Excel c在更新聲明中單獨使用,但如果可能的話,我還沒有看到這樣做的方法。

+0

啊,所以你需要創建一個交叉表...如果我正確地記得它不是在sql server中直接做。 –

+0

@BrianDriscoll不能說我曾試過它,但一旦我回來,我會盡快進行調查。 – motoxrdr21

回答

0

@bluefeet這個工作拉事物的正確順序,但所有的值都爲空的,我結束了思考而不是重新安排我創建的T-SQL中的所有內容,並在工作簿中隱藏一個新的Excel工作表,並將單元格按照我需要的順序鏈接到原始工作表,然後查詢。

感謝大家的幫助。

1

您可能能夠使用以下命令:

select * 
from 
(
    select item, value, line 
    from 
    (
    <yourquery> 
) x 
    unpivot 
    (
    value 
    for line in (L05, L08, L09, 
       SS1, SS2, SS3) 
) unpiv 
) src 
pivot 
(
    max(value) 
    for item in ([WO], [TE], [TF], [QTY]) 
) piv 

SQL Fiddle with Demo

+0

對不起,還沒有機會給這個鏡頭呢,我的新房子還沒有ISP,明天早上我會在辦公室給我一個鏡頭。 – motoxrdr21