Monday 23 June 2014

Removing weekends and Bank Holidays (Dubai) from TSQL SELECT with a function


Alter FUNCTION dbo.fn_WorkDays (@StartDate AS DATETIME, @EndDate AS DATETIME)
--Define the output data type.
RETURNS INT
AS
--Calculate the RETURN of the function.
BEGIN
    RETURN (
     SELECT
        (DATEDIFF(dd,@StartDate, @EndDate)+1)--Start with total number of days including weekends +1 Includes the day run
        -(DATEDIFF(wk,@StartDate, @EndDate)*2)--Subtact 2 days for each full weekend
        -(CASE WHEN DATENAME(dw, @StartDate) = 'Friday' --If StartDate is a Sunday, Subtract 1
            THEN 1
            ELSE 0
        END)
        -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday'--If EndDate is a Saturday, Subtract 1
            THEN 1
            ELSE 0
        END)
        --Now check if there are any bank holidays between the start and end and remove that amount
        - (SELECT COUNT(ivm.HolidayDate)
          FROM Holiday ivm
          WHERE ivm.HolidayDate BETWEEN @StartDate AND @EndDate
          AND  (DatePart(dw, HolidayDate) != 1) and (DatePart(dw, HolidayDate) != 7))
          --WHERE ivm.[Date] BETWEEN '2006-04-14' AND '2006-05-29')    
)
 END
GO

Monday 16 June 2014

Company Sql Server

XL Health 16-06-2014
-------------------------------------
Q1) Select 1
     union
    Select 2
    Union
    Select 1 As ID
   Union
   Select 2 As ID,
   Union All
    Select 3


O/p=1
        2
        3

q2)
------------------------------
ID    NAme                     Amount      Total AMount
1 Reddy                100.00 100.00
2 SubbareddyReddy 200.00 300.00
3 OmReddy                600.00 900.00
5 Test                      100.00 1000.00
6 Test                       100.00 1100.00


Solution Is:

Select CID,CName,
Amount,
(Select Sum(Amount) From AutoSum S  where S.CID < A.CID+1 ) As Balance
From AutoSum A

Tuesday 10 June 2014

Get Quarters StartDate and EndDate from Year

CREATE FUNCTION cal_quarter (@DATE SMALLDATETIME)

    RETURNS INT
    AS
BEGIN
declare @CalendarQuarter int
        IF month(@DATE) in(4,5,6)
            BEGIN
                set @CalendarQuarter =1
            END
        if month(@DATE) in(7,8,9)
            BEGIN
                set @CalendarQuarter =2
            END
        if month(@DATE) in(10,11,12)
            BEGIN
                set @CalendarQuarter =3
            END
        if month(@DATE) in(1,2,3)
            BEGIN
                set @CalendarQuarter =4
            END
return @CalendarQuarter
END