2017-03-15 10 views
0

私はこのクエリからのデータを持っている:クエリをテーブルに更新する方法は?

with countedresult As 
(
    select ROW_NUMBER() over(partition by d_hotbox order by d.D_hotbox,d.start_date) as ADS,d.ID, 
      d.D_hotbox, 
      d.D_PWM_location, 
      d.start_date, 
      d.Last_date--, 
      h.SERIAL_NUMBER 
    from D_FLEET d 
) 
select countedresult.ID, 
     countedresult.D_HOTBOX,   
     countedresult.D_PWM_location, 
     countedresult.start_date, 
     countedresult.Last_date, 
     LAG(ID, 1) over (partition by d_hotbox order by d_hotbox, start_date) as previous_id, 
     ads HB_Run_Number 
from  countedresult 
order by d_hotbox, HB_Run_Number DESC 

は、私は彼らがPREVIOUS_ID、RUN_NOあるテーブル内の2つの列のみを更新する必要があります。

は、私は別のテーブルにこれらの値を挿入したい私はから値を更新したい

[dbo].[D_FLEET] 
(
[ID] [int] IDENTITY(1,1) NOT NULL, 
[D__LOCATION] [int] NOT NULL, 
[D_BOX] [int] NULL, 
[D__MODULE] [int] NULL, 
[ST_DATE] [date] NULL, 
[LT_DATE] [date] NULL, 
[S_START_DATE] [date] NULL, 
[S_LAST_DATE] [date] NULL, 
[[email protected]] [date] NULL, 
[C_LAST_SS] [float] NULL, 
[S_AVG] [float] NULL, 
[SP_MIN] [float] NULL, 
[SP_MAX] [float] NULL, 
[H_TYPE] [nvarchar](50) NULL, 
[R_FRU] [nvarchar](50) NULL, 
[NILD] [nvarchar](50) NULL, 
[RLACE] [nvarchar](50) NULL, 
[HRADE] [float] NULL, 
[HTUS] [nvarchar](50) NULL, 
[HDULE] [nvarchar](50) NULL, 
[HT_DATE] [date] NULL, 
[OAG] [nvarchar](50) NULL, 
[ID_DATE] [datetime] NULL, 
[UPDATED_DATE] [datetime] NULL, 
[Run_Type] [nvarchar](50) NULL, 
[RUN_NO] [nvarchar](50) NULL, 
[PREVIOUS_ID] [int] NULL 
) 

:参照して、テーブルD_FLEETからにクエリーから

  1. Previous_id PREVIOUS_IDをID列に追加します。
  2. HB_RUN_NUMBERからID番号を参照して[RUN_NO]テーブルD_FLEETから。

これは正しい方法ですか?

私はクエリからテーブルへの更新を行っているので、それを行う方法を理解できません。

何か助けていただければ幸いです。

答えて

1
with countedresult As 
(select ROW_NUMBER() over (partition by d_hotbox order by start_date) as ADS 
     , LAG(ID, 1) over (partition by d_hotbox order by start_date) as previous_id 
     , ID 
    from D_FLEET 
) 
update D_FLEET 
    set HB_RUN_NUMBER = countedresult.ADS 
    , PREVIOUS_ID = countedresult.PREVIOUS_ID 
    from D_FLEET 
    join countedresult 
    on D_FLEET.ID = countedresult.ID 
1

結果をターゲットテーブルに追加し、以下のように更新する必要があります。

JOIN(条件に間違いがあります)とUPDATEに別名を使用する方法に注意してください。

with countedresult As 
(
    select ROW_NUMBER() over(partition by d_hotbox order by d.D_hotbox,d.start_date) as ADS,d.ID, 
      d.D_hotbox, 
      d.D_PWM_location, 
      d.start_date, 
      d.Last_date--, 
      h.SERIAL_NUMBER 
    from D_FLEET d 
) 
UPDATE T 
SET 
    RUN_NO = LAG(ID, 1) over (partition by d_hotbox order by d_hotbox, start_date) 
    PREVIOUS_ID = ads 
from  countedresult 
join  D_FLEET AS T ON T.ID = countedresult.ID 
order by d_hotbox, HB_Run_Number DESC 
+0

これは、この行のためにエラーになっていますされている "RUN_NO = LAG(ID、1)(d_hotbox、start_dateのことでd_hotbox順序によって、パーティション)上で、" ウィンドウ表示機能のみがSELECTまたはORDERに表示されますBY句。 –

関連する問題