I need a query to sum up the hours
in a table. Which hours need to be selected depends on the Start Date
column. If the start date is in the past, then it should take Remaining Hours
, if it's in the future it should take Budgeted Hours
.
Start Date | Budgeted Hours | Remaining Hours |
---|---|---|
Jan 1, 2022 | 15 | 3 |
Feb 1, 2022 | 12 | 0 |
Mar 1, 2022 | 14 | 6 |
Apr 1, 2022 | 15 | 13 |
In the example above the summed up hours should be 24 (3 0 6 15).
CodePudding user response:
You don't need a function for this, just a CASE
expression:
DECLARE @now datetime = GETDATE();
SELECT SUM
(
CASE WHEN [Start Date] < @now
THEN [Remaining Hours]
ELSE [Budgeted Hours]
END
)
FROM dbo.tablename;
CodePudding user response:
We can use the function case
create table ops( startDate date, Budgeted int, Remaining int);
insert into ops values ('2022-01-01',15,3), ('2022-02-01',12,0), ('2022-03-01',14,6), ('2022-04-01',15,13), ('2022-05-01',10,18);
select startDate, Budgeted, Remaining, case when startDate < getDate() then Remaining else Budgeted end Hours from ops;
startDate | Budgeted | Remaining | Hours :--------- | -------: | --------: | ----: 2022-01-01 | 15 | 3 | 3 2022-02-01 | 12 | 0 | 0 2022-03-01 | 14 | 6 | 6 2022-04-01 | 15 | 13 | 15 2022-05-01 | 10 | 18 | 10
db<>fiddle here