2013-12-20 111 views
0

enter image description here我已經命名爲更新彙總表

PROD_DET 
(ID , PROD_SUMM_ID, TRANS_DATE, EMP_ID, PROC_ID , PCS) 

PROD_SUMM 
(ID , TRANS_DATE, EMP_ID, PROC_ID , PCS) 

現在,每當一個記錄插入PROD_DET表2桌,

我想Insert(如果唯一的TRANS_DATE,EMP_ID,PROC_ID的記錄不可用)/ Update(在記錄唯一的TRANS_DATE,EMP_ID,PROC_ID的情況下在我PROD_SUMM表可用),

  1. 從PROD_DET獨特TRANS_DATE 表應放入PROD_SUMM表TRANS_DATE,

  2. 獨特EMP_ID和獨特PROC_ID應該進入他們的 各列 在PROD_SUMM表

  3. 的particluar TRANS_DATE的多個記錄PCS的總和應在 PCS列更新PROD_SUMM表
  4. 從PROD_SUMM表
  5. ID應該 PROD_DET表

我已經嘗試了與觸發器,但升級到PROD_SUMM_ID列,並沒有來到大關, 在下面找到

腳本的截圖箱表 ~~~~~~~~~~~~~~~~~~~~~~

CREATE TABLE [dbo].[PROD_DET](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [PROD_SUMM_ID] [int] NULL, 
    [TRAN_DATE] [date] NOT NULL, 
    [EMP_ID] [int] NOT NULL, 
    [PROC_ID] [int] NOT NULL, 
    [PCS] [smallint] NOT NULL, 
CONSTRAINT [PK_PROD_DET] PRIMARY KEY CLUSTERED 
([ID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 

CREATE TABLE [dbo].[PROD_SUMM](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [TRAN_DATE] [date] NOT NULL, 
    [EMP_ID] [int] NOT NULL, 
    [PROC_ID] [int] NOT NULL, 
    [PCS] [int] NOT NULL, 
CONSTRAINT [PK_PROD_SUMM] PRIMARY KEY CLUSTERED 
([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 

回答

0

看到粗糙work.any問題問。

Declare @tbl table([ID] [int] IDENTITY(1,1) NOT NULL,[TRAN_DATE] [date] NOT NULL,[EMP_ID] [int] NOT NULL,[PROC_ID] [int] NOT NULL,[PCS] [int] NOT NULL) 

insert into PROD_DET 
output inserted.TRANS_DATE, inserted.EMP_ID, inserted.PROC_ID , inserted.PCS into @tbl 
values() -- for PROD_DET 

merge PROD_SUMM as target 
using select id,b.TRAN_DATE,b.PCS,a.EMP_ID,a.PROC_ID from @tbl a inner join 
(select TRAN_DATE,sum(PCS) PCS from @tbl group by TRAN_DATE) b on a.TRAN_DATE=b.TRAN_DATE) as source 
on target.TRANS_DATE=source.TRANS_DATE and target.EMP_ID=source.EMP_ID and target.PROC_ID =source.EMP_ID 
when matched then 
update 
set TRAN_DATE=source.TRAN_DATE,EMP_ID=source.EMP_ID,PROC_ID=source.PROC_ID,PCS=source.PCS 
when not matched then 
insert (TRAN_DATE,EMP_ID,PROC_ID,PCS) 
values(source.TRAN_DATE,source.EMP_ID,source.PROC_ID,source.PCS)