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)
 i don't get the value i expec

Author  Topic 

midan1
Starting Member

39 Posts

Posted - 2007-12-30 : 18:10:40
need help
hi i don't get the value i expec

i see only null and 1
i don't see the value 2,3,4,5



DECLARE @StartDate datetime
DECLARE @EndDate datetime

-- first day of next month
SET @StartDate = DATEADD(m,1,GETDATE()-DAY(GETDATE()) + 1)
-- last day of next month
SET @EndDate = DATEADD(m,2,GETDATE()-DAY(GETDATE()) + 1)-1

DECLARE @emp TABLE (EmpID INT, EmpName VARCHAR(50))
INSERT INTO @emp (EmpID, EmpName)
SELECT 1, 'Jacob'

DECLARE @v_un TABLE (EmpID INT, Shift INT)
INSERT INTO @v_un (EmpID, Shift)
SELECT 1, 11 UNION ALL
SELECT 1, 12 UNION ALL
SELECT 1, 22 UNION ALL
SELECT 1, 23 UNION ALL
SELECT 1, 33 UNION ALL
SELECT 1, 34 UNION ALL
SELECT 1, 45 UNION ALL
SELECT 1, 51

-- process for last 30 days
SELECT
e.*,
@StartDate + Number,
DATENAME(dw,@StartDate + number) AS DayOfWeek,
CASE WHEN DATENAME(dw,@StartDate + number) = 'Sunday' THEN
CASE
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(45,51)) THEN 1
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(11,12)) THEN 2
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(22,23)) THEN 3
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=33) THEN 4
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=34) THEN 5
END
END AS SundayValue,
CASE WHEN DATENAME(dw,@StartDate + number) = 'Monday' THEN
CASE
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(45,34)) THEN 1
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(51,11)) THEN 2
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(12,22)) THEN 3
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=23) THEN 4
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=33) THEN 5
END
END AS MondayValue,
CASE WHEN DATENAME(dw,@StartDate + number) = 'Tuesday' THEN
CASE
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(33,34)) THEN 1
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(45,51)) THEN 2
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(12,22)) THEN 3
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=23) THEN 4
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=33) THEN 5
END
END AS Tuesday,
CASE WHEN DATENAME(dw,@StartDate + number) = 'Wednesday' THEN
CASE
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(22,23)) THEN 1
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(33,34)) THEN 2
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(45,51)) THEN 3
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=11) THEN 4
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=12) THEN 5
END
END AS Wednesday,
CASE WHEN DATENAME(dw,@StartDate + number) = 'Thursday' THEN
CASE
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(22,33)) THEN 1
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(34,45)) THEN 2
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(51,11)) THEN 3
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=12) THEN 4
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=22) THEN 5
END
END AS Thursday,
CASE WHEN DATENAME(dw,@StartDate + number) = 'Friday' THEN
CASE
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(12,22)) THEN 1
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(23,33)) THEN 2
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(34,45)) THEN 3
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=51) THEN 4
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=11) THEN 5
END
END AS FridayValue,
CASE WHEN DATENAME(dw,@StartDate + number) = 'Saturday' THEN
CASE
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(22,33)) THEN 1
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(34,45)) THEN 2
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift IN(51,11)) THEN 3
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=12) THEN 4
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=22) THEN 5
END
END AS SaturdayValue
FROM @emp e
CROSS JOIN master.dbo.spt_values sv
WHERE type = 'P' AND number < (DATEDIFF(DAY,@startdate,@enddate)) + 1


TNX

midan1
Starting Member

39 Posts

Posted - 2007-12-30 : 19:45:37
and help me to fix this code
how to do this



CASE WHEN DATENAME(dw,@StartDate + number) = 'Friday' THEN
CASE
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=11 THEN 1
only if it null then value 99
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=12 THEN 2
only if it null then value 98
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=22 THEN 3
only if it null then value 97
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=51) THEN 4
WHEN EmpID IN (SELECT EmpID FROM @v_un WHERE Shift=11) THEN 5
END


Go to Top of Page
   

- Advertisement -