2016-12-02 4 views
-2

各ドナーの生涯寄付ドル金額を反映する計算列DONOR.DonationTotalを作成しようとしています。 (SQL)は 私のテーブルは計算列DONOR.DonationTotal各ドナーの生涯寄付ドル金額を反映

tbl Donor(contactID, NumberDonation, DonationTotal and DonorLevelID) 

tbl Donation (DonationID, DonationDate, DonationAmount, VontactID) and 

tbl Donor_Level (DonorLevelID, DonorLevelName, DonorLevelMin, DonorLevelMax) 

あるだから私の質問は、私が最初のユーザー定義関数を作成する必要がありますか、私は計算列を書くかありますか?それについてどうすればいいですか?私が今まで持っているものは次のとおりです

ALTER TABLE dbo.DONOR 
    UPDATE DonationTotal (

助けてください!

+0

それともそれはのようなものですこのALTER TABLE dbo.DONOR \t \t寄付FROM(SELECT ContactID、SUM(DonationAmount) \t \t \t \t \t DN としてDonationTotalを追加します。 \t \t \t はDN.ContactID = D.ContactID使用しているRDBMS ContactID) – user3638739

+0

BY \t \t \t \t \t GROUP ONドナーD \t \t \t \t \t \tを登録しようか! – kbball

答えて

0

計算列として再作成する前に、列を削除する必要があります。ただし、計算列はスカラー式を使用してのみ定義できます。サブクエリを使用して列の値を計算するVIEWを作成します。

あなたは計算列の作成についての詳細はMSDNを確認することができます。https://msdn.microsoft.com/en-us/library/ms188300.aspx

+0

だから、 \t ALTER TABLE dbo.DONOR \t \t寄付DNからの和(DonationAmount) \t \t \t \t \t、ContactIDをSELECT(よう \tをDonationTotalを追加DonationTotal この \t ALTER TABLEドナー のDROP COLUMNのようないくつかのことです\t \t \t \t JOIN DONOR D \t \t \tContactID BY DN.ContactID = D.ContactID \t \t \t \t \t GROUP)は、計算カラムの値としてサブクエリを持つことができない部分を除い – user3638739

+0

はい、ON\t \t。そのため、投稿したサブクエリを使用してDonationTotalを定義できるので、VIEWソリューションを提案しました。 –

+0

わかりません。 – user3638739

0

を最初に一時テーブルを作成し、そこからドナーを更新してみてください。したがって、このような何か:

CREATE TABLE temp (contactID int, donationtotal decimal); 

INSERT INTO temp 
SELECT donor.contactID, SUM(donation.donationamount) 
FROM donor 
INNER JOIN donation ON donor.contactID = donation.contactID 
GROUP BY donor.contactID; 

UPDATE donor 
SET donor.donationamount = 
(SELECT temp.donationamount 
FROM temp 
WHERE temp.contactID = donor.contactID) 
+0

私は、DonationTotalの価値は常に最新のものであると考えています。このソリューションでは、Donationのレコードが追加/削除/変更されるたびにUPDATEステートメントを実行する必要があります。 –

+0

あなたは正しいです。これは一度の活動であることを意味します。私は本当にその意図が何であるかという疑問からは分かりません... – kbball

0

あなたがここに計算列を使用することはできませんので、あなたの代わりにビューを作成し、テーブルの代わりにビューを使用することもできます。

CREATE VIEW vwDonor 
AS 
SELECT do.contactID 
     ,do.NumberDonation 
     ,(SELECT SUM(DonationAmount) 
      FROM DONATION DN 
      JOIN DONOR D ON DN.ContactID = D.ContactID 
      WHERE D.ContactID = do.contactID 
      GROUP BY D.ContactID) 
     AS DonationTotal 
     ,do.DonorLevelID 
FROM Donor do 
関連する問題