佩特來項目經驗小集合(3)___從多表統計金額匯總到一張表,佩特來__

來源:互聯網
上載者:User

佩特來項目經驗小集合(3)___從多表統計金額匯總到一張表,佩特來__

   來這個項目主要是佩特來公司各部門及各代理商使用的系統,這個系統其中的一下功能就是統計代理商費用。費用的統計放在了費用池(傳統方式統計代理商費用就叫費用池)資料表中,代理商可以根據費用池的中的金額購買東西,費用池中的錢來自於代理商每次填寫的維修評鑑單中。

   下面看一下這部分的資料表結構:

   下面的預存程序是匯總材料費及其他費用表的費用並匯總到費用池資訊表的預存程序,這段代碼有點長,加入了各種判斷:

 

-- =============================================-- Author:馬兆娟-- Create date: 2014-7-20 15:32:16-- Description:統計材費及其他費用匯總到費用池-- =============================================CREATE PROCEDURE [dbo].[PROC_WXJD_CommitFee] -- Add the parameters for the stored procedure here@wxjdId int,   --維修評鑑單ID@dlsId int     --代理商IDASDECLARE@Err1 int,  --聲明變數,事務使用@Err2 int,   --聲明變數,事務使用@glf decimal, --管理費@gsf decimal, --工時費@xj decimal,   --小計@totalMoney decimal, --總金額@count int,  --整型資料@LJGLF decimal, --零件管理費@LJGSF decimal, --零件工時費@QTFY decimal,  --其他費用@WXJDTotalMoney decimal  --總金額BEGINBEGIN TRANSACTION   --開啟事務SELECT @count=0; --給變數賦值    --下面統計其他費用SELECT @count=count(*) FROM T_DLS_WXJD_Cost_QTFY WHERE FID=@wxjdIdIF @count>0   --判斷其他費用表是否已寫入其他費用值,下面給小計賦值BEGIN   SELECT @xj = CASE SUM(xj) WHEN null THEN 0 ELSE Sum(xj) END  FROM T_DLS_WXJD_Cost_QTFY WHERE FID=@wxjdId;ENDELSEBEGIN  SELECT @xj=0;END--下面是統計材料費SELECT @count=0;SELECT @count=count(*) FROM T_DLS_WXJD_Cost_CLF WHERE Fid =@wxjdIdIF @count>0  --判斷材料費表是否已寫入材料費,下面給管理費、工時費賦值BEGIN   SELECT @glf = CASE SUM(GLF) WHEN null then 0 ELSE SUM(GLF) END ,@gsf = CASE SUM(gsf) WHEN null THEN 0 ELSE Sum(gsf) END   FROM T_DLS_WXJD_Cost_CLF WHERE Fid =@wxjdIdENDELSEBEGIN SELECT @glf=0; SELECT @gsf=0;END--下面給總金額賦值SELECT @totalMoney = @xj + @glf + @gsf;  --print @totalMoney;--下面將從其他費用及材料費中統計的金額寫入費用池SELECT @count =0;SELECT @count=COUNT(*) FROM T_FeeExist WHERE DLSID = @dlsId;IF @count>0 --判斷費用池表是否已寫入某代理商費用,如果已寫入過代理商費用,則需向代理商各項費用上添加統計的費用BEGIN   SELECT @LJGLF=LJGLF,@LJGSF=LJGSF,@QTFY=QTFY,@WXJDTotalMoney=WXJDTotalMoney FROM T_FeeExist WHERE DLSID = @dlsId;   SELECT @LJGLF=@LJGLF+@glf;   SELECT @LJGSF=@LJGSF+@gsf;   SELECT @QTFY=@QTFY+@xj;   SELECT @WXJDTotalMoney=@WXJDTotalMoney+@totalMoney;   UPDATE T_FeeExist SET LJGLF=@LJGLF,LJGSF=@LJGSF,QTFY=@QTFY,WXJDTotalMoney=@WXJDTotalMoney WHERE DLSID = @dlsId;ENDELSE     --第一次向費用池寫入某代理商費用,添加新記錄BEGININSERT INTOT_FeeExist(DLSID,LJGLF,LJGSF,QTFY,WXJDTotalMoney) values(@dlsId,@glf,@gsf,@xj,@totalMoney);  ENDSET @err1=@@ERROR --更新維修評鑑表是否已提交到費用池欄位UPDATE T_DLS_WXJD SET IsFYC='是' WHERE ID=@wxjdIdSET @err2=@@ERROR      --判斷是否出錯IF (@Err1=0 and @Err2=0 )COMMIT TRANSACTION   --提交事務ELSEROLLBACK TRANSACTION  --交易回復END

   統計費用就簡單的介紹到這裡了,這裡主要記錄的關鍵點就是如何匯總各表的資料及預存程序中對數值進行判斷!

   

  

 


:select多表多條件查詢匯總到一張表,資料結果不對

select 品番號,
(select sum(id) from 上期結存_明細 where 條件相同) as 上期結存,
(select sum(id) from 出庫單_明細 where 條件相同) as 出庫,
from 部材資訊,上期結存_主表,上期結存_明細
where 條件
差不多這個形式
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.