|
[x]
Posted via EE Mobile
|
||
Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again. |
||
| Question |
|
[x]
Attachment Details
|
||
|
[x]
The Solution Rating System
|
||
With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.
Your Input Matters If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support. Thank you! |
||
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: |
/* THIS IS ORIGINAL SP!!! */
ALTER PROCEDURE [dbo].[CalculateSomeAwefulStuff]
@SSN char(9),
@currentPayrollDate smalldatetime,
@std_hours float
AS
Declare @Hours float
Declare @Work_Date smalldatetime
Declare looper CURSOR SCROLL
FOR SELECT CONVERT( decimal, hrs_Worked ) + ( CONVERT( decimal ,mins_Worked ) / 60) + ( dbo.workDayPercentageStringToDecimal( Work_Day_Percentage ) * (@std_hours/5) ) AS Hours,
Date_Worked
FROM tblRecord
WHERE Finalized = 1
AND SSN = @SSN
AND pay_cycle_date = @currentPayrollDate
AND Time_Code IN ( 'O', 'D', 'N', 'R' )
Declare @temp float
SET @temp = 0
Open looper
Fetch First From looper
INTO @Hours, @Work_Date
While @@Fetch_Status = 0 ------------------LOOP
BEGIN
print @Hours
print datepart( week, @Work_Date )
print @Work_Date
SELECT @temp = COUNT(*) FROM tblACRWeekHours_temp
WHERE week = datepart( week, @Work_Date )
IF @temp <= 0
BEGIN
INSERT INTO tblACRWeekHours_temp( week, hours_already_worked )
VALUES( datepart( week, @Work_Date ), @Hours + @std_hours )
END
ELSE
BEGIN
SELECT @temp = hours_already_worked
FROM tblACRWeekHours_temp
WHERE week = datepart( week, @Work_Date )
UPDATE tblACRWeekHours_temp
SET hours_already_worked = @temp + @Hours
WHERE week = datepart( week, @Work_Date )
END
Fetch Next from looper INTO @Hours, @Work_Date
END -----------------------------------------------------END LOOP
CLOSE looper
DEALLOCATE looper
/********************************************************************************************************/
/* Here's my version of the same thing, to improve some speed. I'd like to eliminate my while loop altogether. Either way, my results are not correct, so what am I doing wrong? */
ALTER PROCEDURE [dbo].[CalculateHoursAlreadyWorkedThisCycleDuplicate]
@SSN char(9),
@currentPayrollDate smalldatetime,
@std_hours float
AS
begin
Declare @Hours float
Declare @Work_Date smalldatetime
/* if temp. table exists, delete it to avoid problems */
IF OBJECT_ID('temp..#temp_table') IS NOT NULL
begin
DROP TABLE #temp_table
end
/* create main temp. table */
CREATE TABLE #tblACRWeekHours_temp
(
ssn char(9),
division char(2),
pay_sect char(3),
currentPayrollDate datetime,
week int,
hours_already_worked float,
_1_0_hrs float,
_1_5_hrs float,
_2_0_hrs float,
_diff_hrs float,
_eper_hrs float,
addnl_money float,
work_location int
)
/* create a temp. table to hold the values, instead of using a CURSOR/loop
like in orign. stored proc */
CREATE TABLE #temp_table
(
hours float,
date_worked datetime
)
/*store everything here ahead of time.
*fetch the hours and date_worked
*To get the hours, use same formula as orgin. stored proc.
*same query as in last orig. proc. */
INSERT INTO #temp_table(hours, date_worked)
SELECT CONVERT( decimal, hrs_worked) + ( CONVERT( decimal ,mins_worked ) / 60)
+ ( dbo.workDayPercentageStringToDecimal( Work_Day_Percentage ) * (37.5/5) ), Date_Worked
FROM tblRecord
WHERE Finalized = 1
AND SSN = @SSN
AND pay_cycle_date = @currentPayrollDate
AND Time_Code IN ( 'O', 'D', 'N', 'R' )
/*looping is ugly but we might have to end up with it here*/
DECLARE @counter int; /* counter for while loop */
DECLARE @i int; /* increment with @i */
set @i = 0;
SELECT @counter = count(*) from #temp_table
/* The idea with the while loop here is:
Grab the top 1 result from #temp_table. After we are doing what we need with this row,
delete it from #temp_table. Then adjust the @counter and @i values at end of while loop.
Something is going wrong here...
*/
WHILE @i < @counter
begin
SET @Work_Date = (select top 1 date_worked from #temp_table)
SET @Hours = (select top 1 hours from #temp_table)
--calc week here instead of re-using it directly
DECLARE @week int
SET @week = DATEPART(week, @Work_Date)
IF NOT EXISTS(SELECT * FROM #tblACRWeekHours_temp WHERE week = @week)
BEGIN
INSERT INTO #tblACRWeekHours_temp( week, hours_already_worked )
SELECT TOP 1 @week, hours + @std_hours
FROM #temp_table
END
ELSE
BEGIN
UPDATE #tblACRWeekHours_temp
SET hours_already_worked = hours_already_worked + @Hours
WHERE week = @week
END
delete from #temp_table where date_worked = @Work_Date
set @counter = @counter - 1;
set @i = @i + 1;
end
|
Advertisement
| Hall of Fame |