2012-08-23 56 views
-1

有3個表:總和與觸發器

Suppl, fields: (Code_name, Tasknum, Pki_num, Group_eng, Name, Descr, Cost, Quan, shop) 
Maker, fields : (Code_maker, Code_maker_arch, Code_name, provider) 
Arrival, fields: (Code_arr, Code_maker, quan_arr) 

我需要得到一個表(用於導出到Excel),例如update_501(Group_eng,名稱,DESCR,quan_arr),其中將包含一個獨特的「描述」由group_eng_501提供。字段「quan_arr」需要爲每個唯一的「Descr」保留來自表Arrival.quan_arr的字段總和。

第一:

則: 觸發,增加了一個獨特的 「DESCR」 到update_501

ALTER trigger [update_pki_501] ON [dbo].[Suppl] 
After Insert 
as 
begin 
Set nocount on; 
if (not(exists(select * from [INSERTED]))) 
return; 

Insert dbo.update_501(Group_eng, Name, Descr) 
select I.Name 
     ,I.Descr 
     ,I.Group_eng 
from Inserted I 
where (I.Group_eng = 501) 
and not exists(select * from dbo.update_501 x where x.Group_eng=I.Group_eng and x.Descr = I.Descr) 
end 

請,幫助在update_501觸發,將增加(和和) .quan_arr from Arrival.quan_arr

+0

從字面上講,有超過100種不同的產品會講SQL。那些RDBMS和觸發器並不都具有相同的語法來創建和定義它們。你必須用你正在使用的RDBMS標記你的問題。 –

回答

0

我很好奇,爲什麼你不想計算總和,而插入到表中,因爲你的觸發器是爲了inse僅限rts。

想必你可以只

INSERT update_501 (Group_eng, Name, Descr, quan_arr) 
SELECT s.Group_eng, s.Name, s.Descr, Sum(a.Quan_Arr) 
FROM Suppl s 
    JOIN Maker m ON s.Code_Name = m.Code_Name 
    JOIN Arrival a ON m.Code_Maker = a.Code_Maker 
WHERE -- if a where clause is needed 
GROUP BY s.Group_eng, s.Name, s.Descr 
--HAVING --if a having clause is appropriate 

插入它,如果你想更新它,當一個新到達插入後,那麼你需要一個INSERT觸發器的到來表是這樣的:

CREATE TRIGGER trg_Arrival_update_501 ON dbo.Arrival 
AFTER INSERT 
AS Begin 
    Set nocount on; 
    if (not(exists(select * from Inserted))) 
    return; 

    DECLARE @Group_eng <datatype>, 
      @Name  <datatype?, 
      @Descr  <datatype>; 
    DECLARE @tbl  table (
    Group_Eng   <datatype>, 
    Name    <datatype>, 
    Descr    <datatype> 
); 

    INSERT @tbl 
    SELECT s.Group_Eng, s.Name, s.Descr 
    FROM Suppl s 
    JOIN Maker m ON s.Code_Name = m.Code_Name 
    JOIN Inserted i ON m.Code_Maker = i.Code_Maker; 

    UPDATE u 
    SET quan_arr = newTotal.quan_sum 
    FROM update_501 u 
     JOIN @tbl t ON u.Group_Eng = t.Group_Eng AND u.Name = t.Name AND u.Descr = t.Descr 
     JOIN Suppl s ON u.Group_Eng = s.Group_Eng 
     JOIN (
      SELECT m.Code_Name, Sum(a.quan_arr) as quan_sum 
      FROM Maker m JOIN Arrival a ON m.Code_Maker = a.Code_Maker 
     ) newTotal; 
END 

注:我可能誤解了您的表格之間的聯接。如果您將表格結構翻譯成易於理解的問題命名,它將幫助您獲得更好的答案。例如

Suppl (Suppl_ID, ...) 
Maker (Maker_ID, ..., Suppl_ID) 
etc 
+0

感謝您的回覆! newTotal; - 「附近的符號不正確」;「 Suppl(Suppl_ID,...); –

+0

Suppl(Suppl_ID,...); Maker(Maker_ID,...,Suppl_ID);到達(Arrival_id,...,Maker_id)。 group_eng - int;名稱,descr - varchar –