This SQL Server stored procedure takes four parameters to show a table order by dates between FromDate and ToDate as follows:
CREATE PROCEDURE GetLedger
(@FromDate date,
@ToDate date,
@Supplier int,
@MOP int)
AS
BEGIN
DECLARE @ExpTABLE TABLE
(
RowNo int,
TranDate date,
NetExpense float
)
INSERT INTO @ExpTABLE
SELECT
ROW_NUMBER() OVER (ORDER BY TranDate), TranDate, SUM(NetAmount)
FROM
Expenditure
WHERE
TranDate BETWEEN @FromDate AND @ToDate
AND SupplierID = @Supplier
AND MOP = @MOP
GROUP BY
TranDate
DECLARE @Data TABLE
(
RDate DATE,
Expense float
PRIMARY KEY (RDate)
)
WHILE (@FromDate <= @ToDate)
BEGIN
INSERT INTO @Data (RDate)
VALUES (@FromDate)
SELECT @FromDate = DATEADD(DAY, 1, @FromDate)
END
WHILE (@FromDate <= @ToDate)
BEGIN
INSERT INTO @Data (Expense)
SELECT NetExpense
FROM @ExpTABLE
WHERE TranDate = @FromDate
SELECT @FromDate = DATEADD(DAY, 1, @FromDate)
END
SELECT * FROM @Data
END
--EXEC GetLedger '2020-03-01' ,'2020-03-31',2,2
The data in @ExpTABLE
is like this:
RowNo TranDate NetExpense
------------------------------
1 2020-03-15 35
Now, I am trying to INSERT this NetExpense of '2020-03-15' in @Data Table in the respective date while the rest NetExpense of Other dates remain null.
This INSERT
query:
WHILE (@FromDate <= @ToDate)
BEGIN
INSERT INTO @Data (Expense)
SELECT NetExpense
FROM @ExpTABLE
WHERE TranDate = @FromDate
SELECT @FromDate = DATEADD(DAY, 1, @FromDate)
END
is inserting NULL
in all dates including '2020-03-15'. What am I missing here?