Да, лучшим способом было бы использовать то, что известно как «Таблица подсчета».Они очень быстро строят большие наборы последовательных данных и, в отличие от WHILE
, CURSOR
или rCTE, не являются рекурсивными.
Это большой удар в темноте, как у меня естьнет образцов данных, но я думаю это то, что вам нужно.
DECLARE @D AS DATE = '20190104';
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL)) N(N)),
Tally AS(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1 AS I
FROM N N1, N N2, N N3), --1000 rows should be enough?
Dates AS(
SELECT DATEADD(DAY, T.I, @D) AS CalendarDate
FROM Tally T
WHERE DATEADD(DAY, T.I, @D) <= GETDATE())
SELECT D.CalendarDate,
COUNT(IR.YourIDColumn) AS OPEN_VOLUMNE
FROM Dates D
LEFT JOIN DBO.INVENTORY_RECORDS IR ON D.Date >= IR.START_DATE
AND (D.Date <= IR.END_DATE OR IR.END_DATE IS NULL)
GROUP BY D.CalendarDate;
Если нет, попробуйте устранить неполадки самостоятельно, а затем предоставьте образец и ожидаемые результаты, если нет.