Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
pthsoon
Starting Member
12 Posts |
Posted - 2010-05-17 : 03:18:27
|
| i wish get the Sum(dm_Value) from @TempDocuments base on Dm_RefCode.But below code a bit repeating. --Column 1SELECT @Rf_C1=SUM (Dm_Value)FROM @TempDocumentsWHERE (DM_RefCode BETWEEN @Rs_C1R1_From AND @Rs_C1R1_To) OR (DM_RefCode BETWEEN @Rs_C1R1_From AND @Rs_C1R1_To) OR (DM_RefCode BETWEEN @Rs_C1R3_From AND @Rs_C1R3_To)--Column 2SELECT @Rf_C2=SUM (Dm_Value)FROM @TempDocumentsWHERE (DM_RefCode BETWEEN @Rs_C2R1_From AND @Rs_C2R1_To) OR (DM_RefCode BETWEEN @Rs_C2R1_From AND @Rs_C2R1_To) OR (DM_RefCode BETWEEN @Rs_C2R3_From AND @Rs_C2R3_To)--Column 3SELECT @Rf_C3=SUM (Dm_Value)FROM @TempDocumentsWHERE (DM_RefCode BETWEEN @Rs_C3R1_From AND @Rs_C3R1_To) OR (DM_RefCode BETWEEN @Rs_C3R1_From AND @Rs_C3R1_To) OR (DM_RefCode BETWEEN @Rs_C3R3_From AND @Rs_C3R3_To)--until--...--Column 12SELECT @Rf_C12=SUM (Dm_Value)FROM @TempDocumentsWHERE (DM_RefCode BETWEEN @Rs_C12R1_From AND @Rs_C12R1_To) OR (DM_RefCode BETWEEN @Rs_C12R1_From AND @Rs_C12R1_To) OR (DM_RefCode BETWEEN @Rs_C12R3_From AND @Rs_C12R3_To)i Wish to change the code, the code can get the sum(dm_value) where condition on Ci, Something look like below.Can any help me or get some advice?SELECT @Rf_Ci=SUM (Dm_Value)FROM @TempDocumentsWHERE (DM_RefCode BETWEEN @Rs_CiR1_From AND @Rs_CiR1_To) OR (DM_RefCode BETWEEN @Rs_CiR1_From AND @Rs_CiR1_To) OR (DM_RefCode BETWEEN @Rs_CiR3_From AND @Rs_CiR3_To) |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-05-17 : 12:09:24
|
| without knowing what values you pass for parameters it s difficult to suggest something. can you let us know what will typical value you pass for parameters.------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
|
pthsoon
Starting Member
12 Posts |
Posted - 2010-05-17 : 21:52:26
|
Thank you for replying @TempDocument DECLARE @TempDocuments TABLE ( Dm_ID INT, Dm_Refcode NVARCHAR(13), Dm_Date DATETIME, Dm_Value MONEY, Dm_Update bit)Dm_ID DM_RefCode Dm_Date Dm_Value Dm_Update ---------------------------------------------------------------3326 08ICT21010000 2010-01-25 19276.14 02630 08ICT21010000 2010-01-25 242.56 02555 08ICT21020000 2010-01-25 2401.00 02556 08ICT21020000 2010-01-25 2658.00 02567 08ICT21030000 2010-01-25 99.00 02568 08ICT21030000 2010-01-25 346.60 02537 08ICT22010100 2010-01-14 3000.00 02601 08ICT22020200 2010-01-14 3054.20 03559 08ICT22030100 2010-01-08 4.20 03376 08ICT24030300 2010-01-11 15.00 03507 08ICT24040100 2010-01-27 15.00 03422 08ICT24040100 2010-01-21 15.00 03510 08ICT25080600 2010-01-27 10.28 02597 08ICT25080600 2010-01-12 119.43 03418 08ICT25081100 2010-01-12 7.20 03419 08ICT25081100 2010-01-12 30.00 03502 08ICT26081500 2010-01-25 5.00 03504 08ICT27081500 2010-01-26 11.00 03501 08ICT27081900 2010-01-25 60.00 02847 09ICT27090000 2010-01-26 2502.00 0(20 row(s) affected)I wish to Sum(Dm_Value) by Range an put it in another table Table Report_FundRf_YrMth nvarchar(6)Rf_RsID nvarchar(8)Rf_Desc nvarchar(100)Rf_C1 MoneyRf_C2 MoneyRf_C3 MoneyRf_C4 MoneyRf_C5 MoneyRf_C6 MoneyRf_C7 MoneyRf_C8 MoneyRf_C9 MoneyRf_C10 MoneyRf_C11 MoneyRf_C12 MoneyExample:i wish to SUM(dm_Value) to put in rf_C8 in table Report_Fund where Dm_Refcode is between 08ICT21000000 and 08ICT21999999 or Dm_Refcode is between 08ICT22000000 and 08ICT22999999answer Sum(dm_Value)=24577.7 |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-05-18 : 01:05:01
|
| where will these ranges be defined?------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
|
pthsoon
Starting Member
12 Posts |
Posted - 2010-05-18 : 01:55:22
|
| the Range define in another TableTable Report_StructRs_ID nvarchar(8) PK,Rs_DpID nvarchar(3),Rs_RtID nvarchar(2),Rs_C1R1_FROM nvarchar(13),Rs_C1R1_To nvarchar(13),Rs_C1R2_FROM nvarchar(13),Rs_C1R2_To nvarchar(13),Rs_C1R3_FROM nvarchar(13),Rs_C1R3_To nvarchar(13),Rs_C2R1_FROM nvarchar(13),Rs_C2R1_To nvarchar(13),Rs_C2R2_FROM nvarchar(13),Rs_C2R2_To nvarchar(13),Rs_C2R3_FROM nvarchar(13),Rs_C2R3_To nvarchar(13),Untill....Rs_C12R1_FROM nvarchar(13),Rs_C12R1_To nvarchar(13),Rs_C12R2_FROM nvarchar(13),Rs_C12R2_To nvarchar(13),Rs_C12R3_FROM nvarchar(13),Rs_C12R3_To nvarchar(13),all the range are retrive form Table Report_StructI using Cursor to get row by row example as below:ALTER PROCEDURE [dbo].[Report_Fund_Utils] @Rf_YrMth NVARCHAR(6), @Rs_DpID NVARCHAR(3), @Rs_RtID NVARCHAR(3)AS--=================================================--SELECT FROM Report_Struct BY Rs_DpID and Rs_RtID--Using CURSOR--=================================================DECLARE MyCursor CURSOR FORWARD_ONLY READ_ONLYFOR SELECT Rs_ID, Rs_C1R1_From, Rs_C1R1_To, Rs_C1R2_From, Rs_C1R2_To, Rs_C1R3_From, Rs_C1R3_To, Rs_C2R1_From, Rs_C2R1_To, Rs_C2R2_From, Rs_C2R2_To, Rs_C2R3_From, Rs_C2R3_To, Rs_C3R1_From, Rs_C3R1_To, Rs_C3R2_From, Rs_C3R2_To, Rs_C3R3_From, Rs_C3R3_To, Rs_C4R1_From, Rs_C4R1_To, Rs_C4R2_From, Rs_C4R2_To, Rs_C4R3_From, Rs_C4R3_To, Rs_C5R1_From, Rs_C5R1_To, Rs_C5R2_From, Rs_C5R2_To, Rs_C5R3_From, Rs_C5R3_To, Rs_C6R1_From, Rs_C6R1_To, Rs_C6R2_From, Rs_C6R2_To, Rs_C6R3_From, Rs_C6R3_To, Rs_C7R1_From, Rs_C7R1_To, Rs_C7R2_From, Rs_C7R2_To, Rs_C7R3_From, Rs_C7R3_To, Rs_C8R1_From, Rs_C8R1_To, Rs_C8R2_From, Rs_C8R2_To, Rs_C8R3_From, Rs_C8R3_To, Rs_C9R1_From, Rs_C9R1_To, Rs_C9R2_From, Rs_C9R2_To, Rs_C9R3_From, Rs_C9R3_To, Rs_C10R1_From, Rs_C10R1_To, Rs_C10R2_From, Rs_C10R2_To, Rs_C10R3_From, Rs_C10R3_To, Rs_C11R1_From, Rs_C11R1_To, Rs_C11R2_From, Rs_C11R2_To, Rs_C11R3_From, Rs_C11R3_To, Rs_C12R1_From, Rs_C12R1_To, Rs_C12R2_From, Rs_C12R2_To, Rs_C12R3_From, Rs_C12R3_ToFROM REPORT_STRUCTWHERE (UPPER(Rs_DpID) = UPPER(@Rs_DpID)) AND (UPPER(Rs_RtID) = UPPER(@Rs_RtID))OPEN MyCursor -- OPEN CURSORFETCH NEXT -- Retrieve one row at a time from the cursorFROM MyCursorINTO @Rs_ID, @Rs_C1R1_From, @Rs_C1R1_To, @Rs_C1R2_From, @Rs_C1R2_To, @Rs_C1R3_From, @Rs_C1R3_To, @Rs_C2R1_From, @Rs_C2R1_To, @Rs_C2R2_From, @Rs_C2R2_To, @Rs_C2R3_From, @Rs_C2R3_To, @Rs_C3R1_From, @Rs_C3R1_To, @Rs_C3R2_From, @Rs_C3R2_To, @Rs_C3R3_From, @Rs_C3R3_To, @Rs_C4R1_From, @Rs_C4R1_To, @Rs_C4R2_From, @Rs_C4R2_To, @Rs_C4R3_From, @Rs_C4R3_To, @Rs_C5R1_From, @Rs_C5R1_To, @Rs_C5R2_From, @Rs_C5R2_To, @Rs_C5R3_From, @Rs_C5R3_To, @Rs_C6R1_From, @Rs_C6R1_To, @Rs_C6R2_From, @Rs_C6R2_To, @Rs_C6R3_From, @Rs_C6R3_To, @Rs_C7R1_From, @Rs_C7R1_To, @Rs_C7R2_From, @Rs_C7R2_To, @Rs_C7R3_From, @Rs_C7R3_To, @Rs_C8R1_From, @Rs_C8R1_To, @Rs_C8R2_From, @Rs_C8R2_To, @Rs_C8R3_From, @Rs_C8R3_To, @Rs_C9R1_From, @Rs_C9R1_To, @Rs_C9R2_From, @Rs_C9R2_To, @Rs_C9R3_From, @Rs_C9R3_To, @Rs_C10R1_From, @Rs_C10R1_To, @Rs_C10R2_From, @Rs_C10R2_To, @Rs_C10R3_From, @Rs_C10R3_To, @Rs_C11R1_From, @Rs_C11R1_To, @Rs_C11R2_From, @Rs_C11R2_To, @Rs_C11R3_From, @Rs_C11R3_To, @Rs_C12R1_From, @Rs_C12R1_To, @Rs_C12R2_From, @Rs_C12R2_To, @Rs_C12R3_From, @Rs_C12R3_ToWHILE @@FETCH_STATUS = 0 -- Keep retrieving rows while the cursor has them BEGIN --======================== --Section Document --======================== SET @Year=LEFT(@Rf_YrMth,4) SET @Month=RIGHT(@Rf_YrMth,2) BEGIN IF @Month<='12' BEGIN IF @Month='02' BEGIN SELECT @FilterDate=(@Year+@Month+'29') if isDate(@FilterDate)=1 SELECT @FilterDate=(@Year+@Month+'29') else SELECT @FilterDate=(@Year+@Month+'28') END ELSE BEGIN SELECT @FilterDate=(@Year+@Month+'31') if isDate(@FilterDate)=1 SELECT @FilterDate=(@Year+@Month+'31') else SELECT @FilterDate=(@Year+@Month+'30') END END ELSE --Error Month of date SET @ERROR = 1 END--===================================--Display/Get Result CALCULATION SUM--====================================--Column 1SELECT @Rf_C1=SUM (Dm_Value)FROM (SELECT Dm_ID, DM_RefCode, Dm_Date, Dm_Value FROM DOCUMENTS WHERE (SUBSTRING(DM_RefCode, 3, 3) = @Rs_DpID) AND (CONVERT(DATETIME, CONVERT(VARCHAR, Dm_Date, 112)) <= @FilterDate)) AS NewDocTableWHERE (DM_RefCode BETWEEN @Rs_C1R1_From AND @Rs_C1R1_To) OR (DM_RefCode BETWEEN @Rs_C1R1_From AND @Rs_C1R1_To) OR (DM_RefCode BETWEEN @Rs_C1R3_From AND @Rs_C1R3_To)--Column 2SELECT @Rf_C2=SUM (Dm_Value)FROM (SELECT Dm_ID, DM_RefCode, Dm_Date, Dm_Value FROM DOCUMENTS WHERE (SUBSTRING(DM_RefCode, 3, 3) = @Rs_DpID) AND (CONVERT(DATETIME, CONVERT(VARCHAR, Dm_Date, 112)) <= @FilterDate)) AS NewDocTableWHERE (DM_RefCode BETWEEN @Rs_C2R1_From AND @Rs_C2R1_To) OR (DM_RefCode BETWEEN @Rs_C2R1_From AND @Rs_C2R1_To) OR (DM_RefCode BETWEEN @Rs_C2R3_From AND @Rs_C2R3_To)-----Until........--Column 12SELECT @Rf_C12=SUM (Dm_Value)FROM (SELECT Dm_ID, DM_RefCode, Dm_Date, Dm_Value FROM DOCUMENTS WHERE (SUBSTRING(DM_RefCode, 3, 3) = @Rs_DpID) AND (CONVERT(DATETIME, CONVERT(VARCHAR, Dm_Date, 112)) <= @FilterDate)) AS NewDocTableWHERE (DM_RefCode BETWEEN @Rs_C12R1_From AND @Rs_C12R1_To) OR (DM_RefCode BETWEEN @Rs_C12R1_From AND @Rs_C12R1_To) OR (DM_RefCode BETWEEN @Rs_C12R3_From AND @Rs_C12R3_To)---=================================================---Insert/Update---1. In Not Exist Before This then AddNew/Insert---2. Update if Exist Before This--===================================================IF NOT EXISTS (SELECT * FROM REPORT_FUND WHERE Rf_YrMth=@Rf_YrMth AND Rf_RsID=@Rs_ID) BEGIN INSERT INTO REPORT_FUND (Rf_YrMth, Rf_RsID, Rf_Desc, Rf_C1, Rf_C2, Rf_C3, Rf_C4, Rf_C5, Rf_C6, Rf_C7, Rf_C8, Rf_C9, Rf_C10, Rf_C11, Rf_C12) VALUES (@Rf_YrMth, @Rs_ID, @Rs_Particular, @Rf_C1, @Rf_C2, @Rf_C3, @Rf_C4, @Rf_C5, @Rf_C6, @Rf_C7, @Rf_C8, @Rf_C9, @Rf_C10, @Rf_C11, @Rf_C12) ENDELSE BEGIN UPDATE REPORT_FUND SET Rf_Desc = @Rs_Particular, Rf_C1 = @Rf_C1,Rf_C2 = @Rf_C2, Rf_C3 = @Rf_C3, Rf_C4 = @Rf_C4, Rf_C5 = @Rf_C5, Rf_C6 = @Rf_C6, Rf_C7 = @Rf_C7, Rf_C8 = @Rf_C8, Rf_C9 = @Rf_C9, Rf_C10 = @Rf_C10, Rf_C11 = @Rf_C11, Rf_C12 = @Rf_C12 WHERE Rf_YrMth = @Rf_YrMth AND Rf_RsID = @Rs_ID END--========================================================================================== FETCH NEXT -- Retrieve one row at a time from the cursor FROM MyCursor INTO @Rs_ID,@Rs_Particular, @Rs_C1R1_From, @Rs_C1R1_To, @Rs_C1R2_From, @Rs_C1R2_To, @Rs_C1R3_From, @Rs_C1R3_To, @Rs_C2R1_From, @Rs_C2R1_To, @Rs_C2R2_From, @Rs_C2R2_To, @Rs_C2R3_From, @Rs_C2R3_To, @Rs_C3R1_From, @Rs_C3R1_To, @Rs_C3R2_From, @Rs_C3R2_To, @Rs_C3R3_From, @Rs_C3R3_To, @Rs_C4R1_From, @Rs_C4R1_To, @Rs_C4R2_From, @Rs_C4R2_To, @Rs_C4R3_From, @Rs_C4R3_To, @Rs_C5R1_From, @Rs_C5R1_To, @Rs_C5R2_From, @Rs_C5R2_To, @Rs_C5R3_From, @Rs_C5R3_To, @Rs_C6R1_From, @Rs_C6R1_To, @Rs_C6R2_From, @Rs_C6R2_To, @Rs_C6R3_From, @Rs_C6R3_To, @Rs_C7R1_From, @Rs_C7R1_To, @Rs_C7R2_From, @Rs_C7R2_To, @Rs_C7R3_From, @Rs_C7R3_To, @Rs_C8R1_From, @Rs_C8R1_To, @Rs_C8R2_From, @Rs_C8R2_To, @Rs_C8R3_From, @Rs_C8R3_To, @Rs_C9R1_From, @Rs_C9R1_To, @Rs_C9R2_From, @Rs_C9R2_To, @Rs_C9R3_From, @Rs_C9R3_To, @Rs_C10R1_From, @Rs_C10R1_To, @Rs_C10R2_From, @Rs_C10R2_To, @Rs_C10R3_From, @Rs_C10R3_To, @Rs_C11R1_From, @Rs_C11R1_To, @Rs_C11R2_From, @Rs_C11R2_To, @Rs_C11R3_From, @Rs_C11R3_To, @Rs_C12R1_From, @Rs_C12R1_To, @Rs_C12R2_From, @Rs_C12R2_To, @Rs_C12R3_From, @Rs_C12R3_To END --End While CLOSE MyCursor -- Close the cursorDEALLOCATE MyCursor -- Deallocate the cursor |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2010-05-18 : 02:01:43
|
| why do you need cursor for this? also why are you using separate columns for storing each range values? isnt it better just to store them as rows so that u will have rangestart,rangeend and category with values c1r1,c1r2,..------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/ |
 |
|
|
pthsoon
Starting Member
12 Posts |
Posted - 2010-05-26 : 01:29:43
|
| I use Cursor to read row by row of the Report_Structure. The Range is used as range of SUM (Dm_Value) where Dm_rercode between R1_From and R1_TO store in Report_Fund.Report_Fund Have 12 Difference Columns.Below is the data look like.Report_Structure Table dataRs_ID Rs_DpID Rs_RtID Rs_Particular Rs_C8R1_To Rs_C8R2_From Rs_C8R2_To Rs_C8R3_From Rs_C9R1_From Rs_C9R1_To Rs_C9R2_From Rs_C9R2_To-------- ------- ------- -------------------------------------------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- -------------ICT01001 ICT 01 OPERATING EXPENDITURE (OPEX) ICT01002 ICT 01 STAFF COST 08ICT21999999 09ICT21000000 09ICT21999999 ICT01003 ICT 01 OTHER OVERHEADS ICT01004 ICT 01 Rental 08ICT22019999 09ICT22010000 09ICT22019999 ICT01005 ICT 01 Energy 08ICT22029999 09ICT22020000 09ICT22029999 ICT01006 ICT 01 Vechicle Running Expenses 08ICT22039999 09ICT22030000 09ICT22039999 ICT01007 ICT 01 Communication 08ICT22049999 09ICT22040000 09ICT22049999 ICT01008 ICT 01 Travel 08ICT22059999 09ICT22050000 09ICT22059999 ICT01009 ICT 01 Insurance 08ICT22069999 09ICT22060000 09ICT22069999 ICT01010 ICT 01 Maintenance & Administrative Expenses 08ICT22082300 09ICT22080000 09ICT22082300 ICT01011 ICT 01 Contingency 08ICT22082400 09ICT22082400 09ICT22082400 ICT01012 ICT 01 ACTUAL OPEX - COmmitted 08ICT22099999 09ICT22090000 09ICT22099999 ICT01013 ICT 01 ICT01014 ICT 01 TOTAL OPEX FOR THE PERIOD (RM) 08ICT29999999 09ICT20000000 09ICT29999999 ICT01015 ICT 01 CAPITAL EXPENDITURE (CAPEX) ICT01016 ICT 01 Furnitures 08ICT41019999 09ICT41010000 09ICT41019999 ICT01017 ICT 01 Communication 08ICT41029999 09ICT41020000 09ICT41029999 ICT01018 ICT 01 Computer Hardware 08ICT40139999 09ICT40130000 09ICT40139999 ICT01019 ICT 01 Computer Software 08ICT41049999 09ICT41040000 09ICT41049999 ICT01020 ICT 01 Tools & Equipment 08ICT41059999 09ICT41050000 09ICT41059999 ICT01021 ICT 01 Vechicles 08ICT41069999 09ICT41060000 09ICT41069999 ICT01022 ICT 01 CAPEX Absorbed By OPEX 08ICT41079999 09ICT41070000 09ICT41079999 ICT01023 ICT 01 TOTAL CAPEX FOR THE PERIOD (RM) 08ICT49999999 09ICT40000000 09ICT49999999 ICT01024 ICT 01 ADD: OHTER INCOMES 08ICT19999999 09ICT10000000 09ICT19999999 ICT01025 ICT 01 TOTAL EXPENDITURE FOR THE PERIOR (RM) 08ICT29999999 08ICT40000000 08ICT49999999 09ICT20000000 09ICT29999999 09ICT40000000 09ICT49999999ICT01026 ICT 01 Consultance Visits 08ICT22079999 09ICT22070000 09ICT22079999 (26 row(s) affected)Report_Fund Table OutPutRf_YrMth Rf_RsID Rf_Desc Rf_C8 Rf_C9-------- -------- ---------------------------------------- --------------------- --------201001 ICT01019 Computer Software NULL NULL201001 ICT01001 OPERATING EXPENDITURE (OPEX) NULL NULL201001 ICT01002 STAFF COST 25023.30 NULL201001 ICT01003 OTHER OVERHEADS NULL NULL201001 ICT01004 Rental 2000.00 NULL201001 ICT01005 Energy 3054.20 NULL201001 ICT01006 Vechicle Running Expenses 19.20 NULL201001 ICT01007 Communication 30.00 NULL201001 ICT01008 Travel NULL NULL201001 ICT01009 Insurance NULL NULL201001 ICT01010 Maintenance & Administrative Expenses 242.91 NULL201001 ICT01011 Contingency NULL NULL201001 ICT01012 ACTUAL OPEX - COmmitted NULL 2502.00201001 ICT01013 NULL NULL201001 ICT01014 TOTAL OPEX FOR THE PERIOD (RM) 30369.61 2502.00201001 ICT01015 CAPITAL EXPENDITURE (CAPEX) NULL NULL201001 ICT01016 Furnitures NULL NULL201001 ICT01017 Communication NULL NULL201001 ICT01018 Computer Hardware NULL NULL201001 ICT01020 Tools & Equipment NULL NULL201001 ICT01021 Vechicles NULL NULL201001 ICT01022 CAPEX Absorbed By OPEX NULL NULL201001 ICT01023 TOTAL CAPEX FOR THE PERIOD (RM) NULL NULL201001 ICT01024 ADD: OHTER INCOMES NULL NULL201001 ICT01025 TOTAL EXPENDITURE FOR THE PERIOR (RM) 30369.61 2502.00201001 ICT01026 Consultance Visits NULL NULL(26 row(s) affected) |
 |
|
|
|
|
|
|
|