Excel列中的SQL更新

时间:2012-11-30 20:37:30

标签: sql sql-update

每次从Mfg设备捕获数据时,我都需要使用Excel工作表中的当前作业信息更新SQL表,我可以通过创建一个存储过程来执行此操作,我可以使用程序运行的JScript执行该操作捕获数据并将其写入Db。

我现在能够很好地查询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单元格,但如果可能的话,我还没有看到这样做的方法。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

@bluefeet这有效地提取了正确的顺序,但是所有的值都是NULL,我在问题之外思考了一点,而不是在我创建的T-SQL中重新安排所有内容并隐藏了一个新的Excel工作簿中的工作表,单元格按照我需要的顺序链接到原始工作表,然后再查询。

感谢大家的帮助。