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.

 All Forums
 SQL Server 2005 Forums
 Transact-SQL (2005)
 How Make code do less repeating?

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 1
SELECT @Rf_C1=SUM (Dm_Value)
FROM @TempDocuments
WHERE (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 2
SELECT @Rf_C2=SUM (Dm_Value)
FROM @TempDocuments
WHERE (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 3
SELECT @Rf_C3=SUM (Dm_Value)
FROM @TempDocuments
WHERE (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 12
SELECT @Rf_C12=SUM (Dm_Value)
FROM @TempDocuments
WHERE (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 @TempDocuments
WHERE (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 MVP
http://visakhm.blogspot.com/

Go to Top of Page

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 0
2630 08ICT21010000 2010-01-25 242.56 0
2555 08ICT21020000 2010-01-25 2401.00 0
2556 08ICT21020000 2010-01-25 2658.00 0
2567 08ICT21030000 2010-01-25 99.00 0
2568 08ICT21030000 2010-01-25 346.60 0
2537 08ICT22010100 2010-01-14 3000.00 0
2601 08ICT22020200 2010-01-14 3054.20 0
3559 08ICT22030100 2010-01-08 4.20 0
3376 08ICT24030300 2010-01-11 15.00 0
3507 08ICT24040100 2010-01-27 15.00 0
3422 08ICT24040100 2010-01-21 15.00 0
3510 08ICT25080600 2010-01-27 10.28 0
2597 08ICT25080600 2010-01-12 119.43 0
3418 08ICT25081100 2010-01-12 7.20 0
3419 08ICT25081100 2010-01-12 30.00 0
3502 08ICT26081500 2010-01-25 5.00 0
3504 08ICT27081500 2010-01-26 11.00 0
3501 08ICT27081900 2010-01-25 60.00 0
2847 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_Fund
Rf_YrMth nvarchar(6)
Rf_RsID nvarchar(8)
Rf_Desc nvarchar(100)
Rf_C1 Money
Rf_C2 Money
Rf_C3 Money
Rf_C4 Money
Rf_C5 Money
Rf_C6 Money
Rf_C7 Money
Rf_C8 Money
Rf_C9 Money
Rf_C10 Money
Rf_C11 Money
Rf_C12 Money



Example:
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 08ICT22999999

answer Sum(dm_Value)=24577.7



Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2010-05-18 : 01:05:01
where will these ranges be defined?

------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/

Go to Top of Page

pthsoon
Starting Member

12 Posts

Posted - 2010-05-18 : 01:55:22
the Range define in another Table
Table Report_Struct
Rs_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_Struct
I 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_ONLY
FOR

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_To
FROM REPORT_STRUCT
WHERE (UPPER(Rs_DpID) = UPPER(@Rs_DpID)) AND (UPPER(Rs_RtID) = UPPER(@Rs_RtID))

OPEN MyCursor -- OPEN CURSOR
FETCH NEXT -- Retrieve one row at a time from the cursor
FROM MyCursor

INTO @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_To

WHILE @@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 1
SELECT @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 NewDocTable
WHERE (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 2
SELECT @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 NewDocTable
WHERE (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 12
SELECT @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 NewDocTable
WHERE (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)
END

ELSE

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 cursor
DEALLOCATE MyCursor -- Deallocate the cursor



Go to Top of Page

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 MVP
http://visakhm.blogspot.com/

Go to Top of Page

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 data
Rs_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 09ICT49999999
ICT01026 ICT 01 Consultance Visits 08ICT22079999 09ICT22070000 09ICT22079999

(26 row(s) affected)


Report_Fund Table OutPut
Rf_YrMth Rf_RsID Rf_Desc Rf_C8 Rf_C9
-------- -------- ---------------------------------------- --------------------- --------
201001 ICT01019 Computer Software NULL NULL
201001 ICT01001 OPERATING EXPENDITURE (OPEX) NULL NULL
201001 ICT01002 STAFF COST 25023.30 NULL
201001 ICT01003 OTHER OVERHEADS NULL NULL
201001 ICT01004 Rental 2000.00 NULL
201001 ICT01005 Energy 3054.20 NULL
201001 ICT01006 Vechicle Running Expenses 19.20 NULL
201001 ICT01007 Communication 30.00 NULL
201001 ICT01008 Travel NULL NULL
201001 ICT01009 Insurance NULL NULL
201001 ICT01010 Maintenance & Administrative Expenses 242.91 NULL
201001 ICT01011 Contingency NULL NULL
201001 ICT01012 ACTUAL OPEX - COmmitted NULL 2502.00
201001 ICT01013 NULL NULL
201001 ICT01014 TOTAL OPEX FOR THE PERIOD (RM) 30369.61 2502.00
201001 ICT01015 CAPITAL EXPENDITURE (CAPEX) NULL NULL
201001 ICT01016 Furnitures NULL NULL
201001 ICT01017 Communication NULL NULL
201001 ICT01018 Computer Hardware NULL NULL
201001 ICT01020 Tools & Equipment NULL NULL
201001 ICT01021 Vechicles NULL NULL
201001 ICT01022 CAPEX Absorbed By OPEX NULL NULL
201001 ICT01023 TOTAL CAPEX FOR THE PERIOD (RM) NULL NULL
201001 ICT01024 ADD: OHTER INCOMES NULL NULL
201001 ICT01025 TOTAL EXPENDITURE FOR THE PERIOR (RM) 30369.61 2502.00
201001 ICT01026 Consultance Visits NULL NULL

(26 row(s) affected)
Go to Top of Page
   

- Advertisement -