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

たとえば、update_501 (Group_eng、Name、Descr、quan_arr) などのテーブル (Excel へのエクスポート用) を取得する必要があります。このテーブルには、group_eng_501 による一意の「Descr」が含まれます。フィールド「quan_arr」は、一意の「Descr」ごとにテーブル Arrival.quan_arr のフィールドの合計を保持する必要があります。

最初:

Insert dbo.update_501(Group_eng, Name, Descr)
select Group_eng, Name, Descr
from Suppl
where (Group_eng = 501)
group by Group_eng, Name, Descr

then: update_501 に一意の「descr」を追加するトリガー

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

Arrival.quan_arr から update_501.quan_arr に追加 (および合計) するトリガーを手伝ってください。

4

1 に答える 1

0

トリガーが挿入専用である場合、テーブルへの挿入中に合計を計算したくない理由について知りたいです。

おそらく、あなたはただ

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

それを挿入した後、新しい到着が挿入されたときにそれを更新する場合は、次のような到着テーブルの挿入トリガーが必要になります。

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
于 2012-08-24T01:56:02.957 に答える