0

製造装置からデータをキャプチャするたびに、Excel シートの現在のジョブ情報で SQL テーブルを更新する必要があります。これは、データをキャプチャするプログラムによって実行される JScript を使用して実行できるストアド プロシージャを作成することで実行できます。そしてそれをDbに書き込みます。

Excelシートをうまくクエリして必要なデータを表示できるようになりましたが、データを行ごとに区切るためのクエリを実行せずに書式設定に少し問題があり、その後1回更新する方法がわかりません更新してください。

シートに対するクエリ:

 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 に答える