• This may give you some ideas. I used a placeholder of <your_tally_table> for the tally table. Replace that with your own tally table name, either a physical tally table or cte tally table. Naturally also change the column name "tally" to whatever the column name in your tally table is.

    SELECT

    ClientNum,

    DATEADD(DAY, (days.tally - 1), InDate_Midnight) AS HousingDate,

    SUM(

    CASE WHEN is_first_day = 1

    THEN CASE WHEN is_last_day = 1

    THEN DATEDIFF(MINUTE, hl.InDate, hl.OutDate)

    ELSE DATEDIFF(MINUTE, hl.InDate, DATEADD(DAY, days.tally, InDate_Midnight))

    END

    WHEN is_last_day = 1 THEN DATEDIFF(MINUTE, DATEADD(DAY, (days.tally - 1), InDate_Midnight), hl.OutDate)

    ELSE 1440 END

    ) AS MinutesInFacility

    FROM #HsLog hl

    CROSS APPLY (

    SELECT DATEADD(DAY, DATEDIFF(DAY, 0, hl.InDate), 0) AS InDate_Midnight

    ) AS assign_alias_names1

    INNER JOIN <your_tally_table> days ON days.tally BETWEEN 1 AND DATEDIFF(DAY, hl.InDate, hl.OutDate) + 1

    CROSS APPLY (

    SELECT

    CAST(CASE WHEN days.tally = 1 THEN 1 ELSE 0 END AS bit) AS is_first_day,

    CAST(CASE WHEN DATEDIFF(DAY, DATEADD(DAY, (days.tally - 1), hl.InDate), hl.OutDate) = 0 THEN 1 ELSE 0 END AS bit) AS is_last_day

    ) AS assign_alias_names

    GROUP BY ClientNum, DATEADD(DAY, (days.tally - 1), InDate_Midnight)

    ORDER BY ClientNum, HousingDate

    SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.