• Much harder without consumable sample data, but something like below should be really close at least.  I'm not 100% sure on the specific end date determination you want, but you can adjust that as needed.

    You don't really need a calendar table, an in-line tally table will do just fine and is much less overhead.


    DECLARE @start_date date
    DECLARE @end_date date

    SET @start_date = DATEADD(YEAR, -1, GETDATE())
    SET @end_date = GETDATE()

    ;WITH
    cteTally10 AS (
      SELECT * FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) AS numbers(number)
    ),
    cteTally1000 AS (
      SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) - 1 AS number
      FROM cteTally10 c1
      CROSS JOIN cteTally10 c2
      CROSS JOIN cteTally10 c3
    )
    SELECT

      CONVERT(char(4), date, 112) AS Year,

      CONVERT(char(2), date, 1) AS Month,

      CONVERT(char(2), date, 3) AS Day,

      ActiveOrdersCount

    FROM (

      SELECT

        date, COUNT(*) AS ActiveOrdersCount

      FROM cteTally1000 days

      CROSS APPLY (
       SELECT DATEADD(DAY, days.number, @start_date) AS date
      ) AS calc_next_date

      INNER JOIN dbo.OrderTable ot ON ot.StartDtm >= date AND
       (ot.StopDtm IS NULL OR ot.StopDtm > date)
     
      WHERE days.number BETWEEN 0 AND DATEDIFF(DAY, @start_date, @end_date) - 1

    ) AS derived

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