0

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

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

4

2 回答 2

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

于 2012-11-30T20:58:17.047 回答
0

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

感谢大家的帮助。

于 2012-12-03T12:57:41.360 回答