2013-12-20 4 views
0

enter image description here я 2 таблицы названыобновление сводной таблицы с подробной таблицей

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 таблицу,

Я хочу Insert (если запись уникального параметра TRANS_DATE, EMP_ID, PROC_ID недоступна)/Update (в случае записи уникального символа TRANS_DATE, EMP_ID, PROC_ID доступен) в моем PROD_SUMM таблице как,

  1. уникальный TRANS_DATE из PROD_DET таблицы должны быть введены в TRANS_DATE из PROD_SUMM таблицы,

  2. уникальный EMP_ID и уникальный PROC_ID должны войти в их соответствующие столбцы в PROD_SUMM таблице

  3. сумма PCS из нескольких записей в particluar TRANS_DATE следует обновить в колонке PCS в PROD_SUMM таблице
  4. ID из PROD_SUMM таблицы следует обновить до столбца PROD_SUMM_ID в PROD_DET таблицы

Я попытался с триггером, но не пришел к марке, найти скриншоты ниже

сценария к таблицам крейта ~~~~~~~~~~~~~~~~~~~~~~

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) 
Смежные вопросы