-1

SQL 挿入ステートメントに問題があります。

現在、Insert ステートメントは .CSV ファイルから SQL テーブルにデータを転送するために使用されますが、.CSV ファイルの内容は異なる場合があります。つまり、以前のものとは異なる列が含まれる場合があります。

.CSV ファイルからデータを取得するために使用するステートメントは、.CSV が表示されるのとまったく同じように一時テーブルを作成するため、さまざまな列をサポートします。

私が現在使用している挿入ステートメントは次のとおりです。

INSERT INTO RTCU(ItemDATE, ItemTIME, SITENAME, GENSETNAME, GENSET_SN, REASON, EVENT, RPM, Pwr
                 ,Gfrq ,Vg1 ,Vg2 ,Vg3 ,Vg12 ,Vg23 ,Vg31, Ig1, Ig2, Ig3, Mfrq, Vm1, Vm2, Vm3
                 ,Vm12 ,Vm23 ,Vm31 ,BIN ,BOUT ,Mode ,CCpres ,OilLev
                 ,ActDem ,OilT ,AirInT ,RecAT ,JWTout ,JWTin ,JWGKin ,CylA1 ,CylA2 ,CylA3 ,CylA4 ,CylA5
                 ,CylA6 ,CylB1 ,CylB2 ,CylB3 ,CylB4 ,CylB5 ,CylB6 ,ActPwr ,kWhour ,Runhrs ,VRO)      
SELECT CONVERT(DATETIME,ItemDATE,103), ItemTIME, SITENAME, GENSETNAME, GENSET_SN, REASON, EVENT, RPM, Pwr
                 ,Gfrq ,Vg1 ,Vg2 ,Vg3 ,Vg12 ,Vg23 ,Vg31, Ig1, Ig2, Ig3, Mfrq, Vm1, Vm2, Vm3
                 ,Vm12 ,Vm23 ,Vm31 ,BIN ,BOUT ,Mode ,CCpres ,OilLev
                 ,ActDem ,OilT ,AirInT ,RecAT ,JWTout ,JWTin ,JWGKin ,CylA1 ,CylA2 ,CylA3 ,CylA4 ,CylA5
                 ,CylA6 ,CylB1 ,CylB2 ,CylB3 ,CylB4 ,CylB5 ,CylB6 ,ActPwr ,kWhour ,Runhrs ,VRO
FROM tmpDATA

しかし、ご覧のとおり、コピーする列は固定されています。.CSV ファイルの 1 つに「HeatMeter」という列がある場合、この列を RTCU テーブルにコピーするにはどうすればよいでしょうか?

前もって感謝します!!ニール

4

1 に答える 1

0

私はあなたのニーズを完全に理解しているとは言えませんが、これが私の最善の推測です...

宛先テーブルがあります...

 ID | val_1 | val_2 | val_3

ソーステーブルがあります...

 ID | val_1 | val_3

そして、2 番目のソース テーブルがあります...

 ID | val_2 | val_3

2 つの異なるソースからのデータを宛先テーブルに挿入したい....

1 つのオプションは、異なる列にデフォルト値を指定することです...

CREATE TABLE destination (
  id      INT,
  val_1   INT DEFAULT(-1),
  val_2   INT DEFAULT(-2),
  val_3   INT DEFAULT(-3)
)

-- val3 is not specified in this insert
-- This means that it will appear as -3 for all the inserted rows
------------------------------------------------------------------
INSERT INTO destination (id, val_1, val_2)
SELECT id, val_1, val_2 FROM source1

-- val1 is not specified in this insert
-- This means that it will appear as -1 for all the inserted rows
------------------------------------------------------------------
INSERT INTO destination (id, val_2, val_3)
SELECT id, val_2, val_3 FROM source2

別のオプションは、「欠落している」フィールドに表示する値を単純にハードコーディングすることです...

-- source1 does not have a val_3 field, so we hard-code the insert
-- to always put NULL in that field.
-------------------------------------------------------------------
INSERT INTO destination (id, val_1, val_2, val3)
SELECT id, val_1, val_2, NULL  FROM source1

-- source2 does not have a val_1 field, so we hard-code the insert
-- to always put 0 in that field.
-------------------------------------------------------------------
INSERT INTO destination (id, val_1, val_2, val_3)
SELECT id, 0,  val_2, val_3 FROM source2

デフォルトまたはハードコーディングされた値として、任意の値を使用できます。

于 2012-08-14T10:40:26.217 に答える