• This seems to work as well:CREATE TABLE #SampleData (
        DayOne varchar(9) NOT NULL,
        DayTwo varchar(9) NOT NULL
    );
    CREATE CLUSTERED INDEX NDX_TEMP_SampleData_DayTwo_DayOne_ ON #SampleData
        (
        DayTwo ASC,
        DayOne ASC
        );

    INSERT INTO #SampleData (DayOne, DayTwo)
    SELECT X.DayOne, X.DayTwo
    FROM (
        VALUES    ('Monday',    'Friday'),
                ('Tuesday',    'Wednesday'),
                ('Friday',    'Monday')
        ) AS X (DayOne, DayTwo);

    CREATE TABLE #TwoWeeks (
        ID int UNIQUE NOT NULL,
        TheDate date NOT NULL,
        WeekDayName varchar(9) NOT NULL
    );
    CREATE UNIQUE CLUSTERED INDEX UCDX_TEMP_TwoWeeks_WeekDayName_TheDate ON #TwoWeeks
        (
        WeekDayName ASC,
        TheDate ASC
        );

    SET NOCOUNT ON;
    PRINT CONVERT(varchar(30), SYSDATETIME()) + ' - Query Start';

    INSERT INTO #TwoWeeks (ID, TheDate, WeekDayName)
    SELECT X.ID, X.TheDate, X.WeekDayName
    FROM (
        VALUES    ( 1, '1900-01-01', 'Monday'),
                ( 2, '1900-01-02', 'Tuesday'),
                ( 3, '1900-01-03', 'Wednesday'),
                ( 4, '1900-01-04', 'Thursday'),
                ( 5, '1900-01-05', 'Friday'),
                ( 6, '1900-01-06', 'Saturday'),
                ( 7, '1900-01-07', 'Sunday'),
                ( 8, '1900-01-08', 'Monday'),
                ( 9, '1900-01-09', 'Tuesday'),
                (10, '1900-01-10', 'Wednesday'),
                (11, '1900-01-11', 'Thursday'),
                (12, '1900-01-12', 'Friday'),
                (13, '1900-01-13', 'Saturday'),
                (14, '1900-01-14', 'Sunday')
        ) AS X (ID, TheDate, WeekDayName);

    SELECT SD.DayOne, SD.DayTwo, D2.ID - D1.ID AS DaysBetween
    FROM #SampleData AS SD
        CROSS APPLY    (
                    SELECT TOP (1) TW.ID, TW.TheDate
                    FROM #TwoWeeks AS TW
                    WHERE TW.WeekDayName = SD.DayOne
                    ORDER BY TW.TheDate
                    ) AS D1
        CROSS APPLY (
                    SELECT TOP (1) TW.ID
                    FROM #TwoWeeks AS TW
                    WHERE TW.WeekDayName = SD.DayTwo
                        AND TW.TheDate > D1.TheDate
                    ORDER BY TW.TheDate
                    ) AS D2

    PRINT CONVERT(varchar(39), SYSDATETIME()) + ' - Query Complete';

    DROP TABLE #SampleData;
    DROP TABLE #TwoWeeks;

    The query portion runs in roughly 15.6 ms, and consistently.   Your mileage may vary.

    Steve (aka sgmunson) 🙂 🙂 🙂
    Rent Servers for Income (picks and shovels strategy)