如何使用联合集中的特定列数据填充表

时间:2012-07-31 16:04:40

标签: sql-server

我想要的是这样的事情:

SELECT * FROM [dbo].[UNIONTABLE1]
UNION 
SELECT * FROM [dbo].[UNIONTABLE2]
AS RESULTUNION;

DELETE FROM [dbo].[ResultTestTable];

INSERT INTO [dbo].[ResultTestTable]
  ( 
  test2
  ,test3
  ,test4
  ,test5
  ,test6
  ,test7
   )
  VALUES
  (
   RESULTUNION.LT_ALL_TAB_NAME
  ,RESULTUNION.LT_SCH_KL_RED_GASDRUCK
  ,RESULTUNION.LT_EINST_NOR_ZEIT + RESULTUNION.LT_EINST_NOR_AUSBLASZEIT
  ,RESULTUNION.LT_EINST_SAN_ZEIT + RESULTUNION.LT_EINST_SAN_AUSBLASZEIT
  ,RESULTUNION.LT_EINST_NOR_ZEIT_PCS + RESULTUNION.LT_EINST_NOR_AUSBLASZEIT_PCS
  ,RESULTUNION.LT_EINST_SAN_ZEIT_PCS + RESULTUNION.LT_EINST_SAN_AUSBLASZEIT_PCS
  );

我想用RESULTUNION表的所有行填充ResultTestTable,但只能使用RESULTUNION表的特定列。 此外,我想添加RESULTUNION表的两个列数据并将其映射到ResultTestTable中的一列。 添加的值是浮点数。

我正在使用Microsoft SQL Server Management Studio。

上面的状态不起作用,这是显而易见的,但我不知道该怎么做。 如果我执行上面的语句,我会收到以下错误: 消息4104,级别16,状态1,过程test_storedProcedure,第31行 无法绑定多部分标识符“RESULTUNION.LT_ALL_TAB_NAME”。

我假设我必须执行类似for循环的操作,但我不知道RESULTUNION表必须循环多少行。

有没有人有想法。 感谢名单

1 个答案:

答案 0 :(得分:1)

首先,永远不要在SQL中使用“SELECT *”,始终指定列名。一旦考虑到这一点,就会更容易看到解决方案。这是:

INSERT INTO [dbo].[ResultTestTable]
  (
  test2
  ,test3
  ,test4
  ,test5
  ,test6
  ,test7
   )
SELECT 
  LT_ALL_TAB_NAME
  ,LT_SCH_KL_RED_GASDRUCK
  ,LT_EINST_NOR_ZEIT + LT_EINST_NOR_AUSBLASZEIT
  ,LT_EINST_SAN_ZEIT + LT_EINST_SAN_AUSBLASZEIT
  ,LT_EINST_NOR_ZEIT_PCS + LT_EINST_NOR_AUSBLASZEIT_PCS
  ,LT_EINST_SAN_ZEIT_PCS + LT_EINST_SAN_AUSBLASZEIT_PCS
FROM [dbo].[UNIONTABLE1]
UNION ALL -- This will keep duplicate rows. UNION, without ALL, removes duplicates
SELECT 
  LT_ALL_TAB_NAME
  ,LT_SCH_KL_RED_GASDRUCK
  ,LT_EINST_NOR_ZEIT + LT_EINST_NOR_AUSBLASZEIT
  ,LT_EINST_SAN_ZEIT + LT_EINST_SAN_AUSBLASZEIT
  ,LT_EINST_NOR_ZEIT_PCS + LT_EINST_NOR_AUSBLASZEIT_PCS
  ,LT_EINST_SAN_ZEIT_PCS + LT_EINST_SAN_AUSBLASZEIT_PCS
ROM [dbo].[UNIONTABLE2]

显然,如果两个表的列具有不同的名称,则必须相应地修改查询。