Currently this is the store procedure I am working on, it is working according to some testing that was done. I feel that it could be improved though, could use some optimization, feedback or recommendations.
What is it supposed to do? For given policy id passed in, grab all coverages associated with the policy. For each coverage get units that are tied to the coverage. I need to check for 3 conditions for all units for a coverage which is based on Sales_Closing_Date
. Depending on the condition update the coverage table with the flag.
DECLARE @Policy_ID BIGINT = 0,
@CurrCoverageID BIGINT = 0,
@Year INT = 0
DECLARE @Coverages TABLE(CID INT IDENTITY(1,1),CoverageID BIGINT NOT NULL)
DECLARE @Units TABLE(UID INT IDENTITY(1,1),CoverageID BIGINT NOT NULL,SalesClosing DATE)
DECLARE @CoveragesOut TABLE(CoverageID BIGINT NOT NULL, MultiFlag CHAR(1))
SET @Year = (SELECT p.Reins_Year FROM dbo.Policy p WHERE p.Policy_ID = @Policy_ID)
--INSERT ALL COVERAGES FOR THIS POLICY
INSERT INTO @Coverages(CoverageID)
SELECT Coverage_ID FROM dbo.Coverages c WHERE c.Policy_ID = @Policy_ID
--GO THROUGH COVERAGE AND GET THEIR SALES CLOSING DATE
WHILE (SELECT COUNT(*) FROM @Coverages) > 0
BEGIN
SET @CurrCoverageID = (SELECT TOP 1 CoverageID FROM @Coverages)
INSERT INTO @Units(CoverageID,SalesClosing)
SELECT DISTINCT
@CurrCoverageID,
CAST(pu.Sales_Closing_Date AS DATE)
FROM dbo.Policy_Units pu
WHERE pu.Coverage_ID = @CurrCoverageID
AND pu.Sales_Closing_Date IS NOT NULL
--WE SHOULD HAVE THE SALES CLOSING DATES NOW
--INSERT INTO OUTPUT TABLE NOW...
INSERT INTO @CoveragesOut(CoverageID,MultiFlag)
SELECT DISTINCT
u.CoverageID,
CASE (SELECT COUNT(*) FROM @Units)
WHEN 1 THEN
CASE
--SPRING--
WHEN u.SalesClosing BETWEEN CAST('1/1/' + CAST(@Year AS VARCHAR) AS DATE) AND CAST('4/30/' + CAST(@Year AS VARCHAR) AS DATE) OR u.SalesClosing >= CAST('1/1/' + CAST(@Year AS VARCHAR) AS DATE) AND u.SalesClosing < CAST('5/1/' + CAST(@Year AS VARCHAR) AS DATE) THEN 'S'
--FALL--
WHEN u.SalesClosing BETWEEN CAST('7/1/' + CAST(@Year - 1 AS VARCHAR) AS DATE) AND CAST('12/31/' + CAST(@Year - 1 AS VARCHAR) AS DATE) OR u.SalesClosing >= CAST('7/1/' + CAST(@Year - 1 AS VARCHAR) AS DATE) AND u.SalesClosing < CAST('1/1/' + CAST(@Year AS VARCHAR) AS DATE) THEN 'F'
END
WHEN 2 THEN 'B'
ELSE NULL
END AS MultiFlag
FROM @Units u
--REMOVE THE CURRENT COVERAGE FROM TABLE VAR
DELETE FROM @Coverages WHERE CoverageID = @CurrCoverageID
--REMOVE UNITS FROM TABLE VAR
DELETE FROM @Units
END
--FOR TESTING PURPOSES
SELECT c.Description,c.County_Description, co.*
FROM @CoveragesOut co
INNER JOIN dbo.Coverages c
ON c.Coverage_ID = co.CoverageID
If you need anything else, please let me know. Again, this query is working just fine.