Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql-根据查询表中的列名插入目标表中的列_Sql_Sql Server_Sql Insert - Fatal编程技术网

sql-根据查询表中的列名插入目标表中的列

sql-根据查询表中的列名插入目标表中的列,sql,sql-server,sql-insert,Sql,Sql Server,Sql Insert,我有一个表,有35列和数十万行(每行也是唯一的) 表B中的每一行都有每小时一次的观察和一些其他的内部管理信息 我想在查询TableB的基础上插入到另一个表(TableA),这样TableA(Hour)中的一列会被分配值1(用于列Hour1),2(用于列Hour2),3(用于列Hour3)等等,并且列ObservationValue会被分配值Hour1,Hour2,Hour3。。。到24小时。所以表A是时间序列表示法 表A看起来是这样的: +----------------------------

我有一个表,有35列和数十万行(每行也是唯一的)

表B中的每一行都有每小时一次的观察和一些其他的内部管理信息

我想在查询TableB的基础上插入到另一个表(TableA),这样TableA(Hour)中的一列会被分配值1(用于列Hour1),2(用于列Hour2),3(用于列Hour3)等等,并且列ObservationValue会被分配值Hour1,Hour2,Hour3。。。到24小时。所以表A是时间序列表示法

表A看起来是这样的:

+------------------------------------------------+
|Date| ID| Name | Zone | Hour | ObservationValue |
+------------------------------------------------+
我完全不知道我怎么能做到这一点。我知道如何根据查询插入到表中,但不知道如何执行我想要执行的操作

谢谢你的帮助

编辑

样本数据(我不确定TableB的设计是否是最好的,但这是在我继承系统之前很多年完成的)

表B:

8/1/2006 12:00:00 AM 48590 Miami Florida Blah Blah Blah Blah 69.89 63.55 50.73 45.05 44.17 50.39 63.93 84.73 87.61 102.43 123.39 154.33 181.1 232.71 262.11 290.64 299.44   262.67 214.22 191.15 172.49 132.62 105.83 98.25
以上是一条记录的示例。在本例中,ID=48590,Name=Miami,Zone=Florida。一年中的每一天都有一个条目,持续10年。此表中大约有10000个ID

表a:

8/1/2006 12:00:00 AM 48590 Miami Florida 1 69.89
8/1/2006 12:00:00 AM 48590 Miami Florida 2 63.55 
8/1/2006 12:00:00 AM 48590 Miami Florida 3 50.73
8/1/2006 12:00:00 AM 48590 Miami Florida 4 45.05
8/1/2006 12:00:00 AM 48590 Miami Florida 5 44.17 
8/1/2006 12:00:00 AM 48590 Miami Florida 6 50.39 
8/1/2006 12:00:00 AM 48590 Miami Florida 7 63.93 
8/1/2006 12:00:00 AM 48590 Miami Florida 8 84.73 
8/1/2006 12:00:00 AM 48590 Miami Florida 9 87.61 
8/1/2006 12:00:00 AM 48590 Miami Florida 10 102.43 
8/1/2006 12:00:00 AM 48590 Miami Florida 11 123.39 
8/1/2006 12:00:00 AM 48590 Miami Florida 12 154.33 
8/1/2006 12:00:00 AM 48590 Miami Florida 13 181.1 
8/1/2006 12:00:00 AM 48590 Miami Florida 14 232.71 
8/1/2006 12:00:00 AM 48590 Miami Florida 15 262.11 
8/1/2006 12:00:00 AM 48590 Miami Florida 16 290.64 
8/1/2006 12:00:00 AM 48590 Miami Florida 17 299.44  
8/1/2006 12:00:00 AM 48590 Miami Florida 18 262.67 
8/1/2006 12:00:00 AM 48590 Miami Florida 19 214.22 
8/1/2006 12:00:00 AM 48590 Miami Florida 20 191.15 
8/1/2006 12:00:00 AM 48590 Miami Florida 21 172.49 
8/1/2006 12:00:00 AM 48590 Miami Florida 22 132.62 
8/1/2006 12:00:00 AM 48590 Miami Florida 23 105.83 
8/1/2006 12:00:00 AM 48590 Miami Florida 24 98.25

我的另一个问题是,如果我打算做算术运算,比如从同一个ID但在另一个表中的ObservationValue中减去给定ID的ObservationValue,那么什么结构更好?TableA最适合这种类型的操作,还是采用TableB结构更好

听起来像是要将TableB中的数据解压以将其插入TableA中。这将获取表B中的列值并将其转换为行:

-- insert into tableA (Date, Id, Name, Zone, hour, observationvalue)
select Date,
  Id,
  Name,
  Zone,
  replace(hour, 'hour', '') hour,
  observationvalue
from tableB
unpivot
(
  observationvalue
  for hour in (Hour1, Hour2, Hour3, Hour4, Hour5...)
) unpiv;

请参见

请提供
表B的示例数据
以及在
插入后在
表A
中的外观。请通过添加适当的标记(Oracle、SQL Server、MySQL等)来指定要针对的RDBMS。可能有一些答案利用了并非普遍支持的语言或产品功能。另外,通过使用特定的RDBMS标记它,您的问题可能会得到更适合回答它的人的注意。我会把它添加到标签上。谢谢蓝脚。我会试试看。我还想知道,如果我打算做算术运算,比如从同一个ID但在另一个表中的ObservationValue中减去给定ID的ObservationValue,那么什么结构更好?例如,我想计算ObservationValue的预测值(发生在前一天,在另一个表中)与实际ObservationValue之间的差值。TableA最适合这种类型的操作,还是使用TableB结构更好?@algotr8如果您的
TableB
已非规范化,应更改为使用类似于
TableA
,那么您的数据格式可用于比较。很好。非常感谢。我感谢你的帮助。我要试一试。
-- insert into tableA (Date, Id, Name, Zone, hour, observationvalue)
select Date,
  Id,
  Name,
  Zone,
  replace(hour, 'hour', '') hour,
  observationvalue
from tableB
unpivot
(
  observationvalue
  for hour in (Hour1, Hour2, Hour3, Hour4, Hour5...)
) unpiv;