每次从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单元格,但如果可能的话,我还没有看到这样做的方法。
答案 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
答案 1 :(得分:0)
@bluefeet这有效地提取了正确的顺序,但是所有的值都是NULL,我在问题之外思考了一点,而不是在我创建的T-SQL中重新安排所有内容并隐藏了一个新的Excel工作簿中的工作表,单元格按照我需要的顺序链接到原始工作表,然后再查询。
感谢大家的帮助。