0

私が望んでいるのは次のようなものです:

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
  );

ResultTestTableにRESULTUNIONテーブルのすべての行を入力したいのですが、RESULTUNIONテーブルの特定の列のみを入力します。さらに、RESULTUNIONテーブルの2つの列データを追加し、それをResultTestTableの1つの列にマップしたいと思います。付加値は浮動小数点数です。

私はMicrosoftSQLServerManagementStudioを使用しています。

上記のstatemantは機能しません。これは明らかですが、正しく行う方法がわかりません。上記のステートメントを実行すると、次のエラーが発生します。メッセージ4104、レベル16、状態1、プロシージャtest_storedProcedure、行31マルチパート識別子「RESULTUNION.LT_ALL_TAB_NAME」をバインドできませんでした。

forループのようなことをしなければならないと思いますが、RESULTUNIONテーブルがループしなければならない行数がわかりません。

誰かが考えを持っていますか。ありがとう

4

1 に答える 1

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]

明らかに、2つのテーブルの列の名前が異なる場合は、それに応じてクエリを修正する必要があります。

于 2012-07-31T16:09:58.353 に答える