1

私は2つのテーブルを持っています.1つはタイマー間隔で値をsensor_pool変更するものですtemp_cel

センサープール

| address | temp_cels |
|---------------------|
| sensor1 | 83C       |
| sensor2 | 82C       |
| sensor3 | 85C       |
| sensor4 | 85C       |
| sensor5 | 84C       |

動的に作成された列を持つ別のテーブルsensor_history(センサーアドレスを列名として列を追加)。日時はキャプチャできましたがtemp_cels、他のテーブルからはキャプチャできませんでした。

INSERT INTO sensor_history(datetime) VALUES(" & dtfStr & ")
  • dtfStr = timestamp

センサー履歴

|    datetime    | sensor1 | sensor2 | sensor3 | sensor4 | sensor5 | 
|------------------------------------------------------------------|
| 12022013080513 |  NULL   |  NULL   |  NULL   |  NULL   |  NULL   |

これまでのところ、forループ内にあるこのクエリがあります(列を取得するため)

IF EXISTS(SELECT datetime FROM sensor_history where datetime='" & dtfStr & "') 
MERGE sensor_history sh USING sensor_pool sp ON [(SELECT '" & dgvSensors.Rows(l).Cells(0).Value & "' 
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='sensor_history' AND COLUMN_NAME='" & dgvSensors.Rows(l).Cells(0).Value & "')] = sp.sens_code 
WHEN MATCHED THEN UPDATE SET sh.[" & dgvSensors.Rows(l).Cells(0).Value & "] = st.temp_cels 
WHEN NOT MATCHED BY TARGET THEN INSERT ([" & dgvSensors.Rows(l).Cells(0).Value & "]) VALUES (st.temp_cels);"

dgvSensors の datagridview は、sensor_pool テーブルと同じです。vb.net + SQL Server

これは私の目標結果がどうあるべきかです:

|    datetime    | sensor1 | sensor2 | sensor3 | sensor4 | sensor5 | 
|------------------------------------------------------------------|
| 12022013080513 |   83C   |   82C   |   85C   |   85C   |   84C   |

誰かが私を助けてくれることを願っています

ありがとうございました

4

1 に答える 1

0
INSERT INTO sensor_history(datetime,sensor1,sensor2,sensor3,sensor4,sensor5) 
VALUES(getdate(),
select temp_cels from sensor_pool where address='sensor1',
select temp_cels from sensor_pool where address='sensor2',
select temp_cels from sensor_pool where address='sensor3',
select temp_cels from sensor_pool where address='sensor4',
select temp_cels from sensor_pool where address='sensor5')
于 2013-02-12T06:00:39.370 に答える