我有一个简单的查询:-
SELECT *
FROM dbo.NGPCostPosition
这将返回以下数据:-
我想尝试显示当月的总成本,同时仍然可以访问所有其他数据,所以也许一个名为当月的新列只能由属于该类别的项目填充?
做这个的最好方式是什么?
欢迎和赞赏所有建议。
我有一个简单的查询:-
SELECT *
FROM dbo.NGPCostPosition
这将返回以下数据:-
我想尝试显示当月的总成本,同时仍然可以访问所有其他数据,所以也许一个名为当月的新列只能由属于该类别的项目填充?
做这个的最好方式是什么?
欢迎和赞赏所有建议。
这应该在查询中添加一个额外的列,仅显示当前月份的总成本。
SELECT
*,
CASE
WHEN
DATEPART(MOTNH, TranDate) = DATEPART(MONTH, GETDATE()) AND
DATEPART(YEAR, TranDate) = DATEPART(YEAR, GETDATE())
THEN TotalCost
ELSE 0
END CurrentMonthCost
FROM dbo.NGPCostPosition
您可以像这样在查询中添加一列:
Select *,
CASE WHEN
datepart(mm, getdate()) == datepart(mm, TranDate)
and datepart(yy, getdate()) == datepart(yy, tranDate)
then TotalCost
else 0
end as CurrentMonthTotalCost
然后在你的工作表的某个地方总结一下。您还可以使用日期格式(我不喜欢这些,因为它们对于您正在比较的内容有点密码):
Select *,
CASE
WHEN CONVERT(VARCHAR(7), GETDATE(), 111) == CONVERT(VARCHAR(7), TRANDATE, 111)
THEN TotalCost
ELSE 0
End as CurrentMonthTotalCost
尝试这个:
SELECT doctype, projectNo, CostCat, [all other columns etc.],
(Select Sum(Quantity * UnitCost) From NGPCostPosition
Where transDate >= DateAdd(month,
datediff(month,0,p.Transdate), 0)
And transDate < DateAdd(month,
datediff(month,0, p.Transdate), 31)) MonthlyTotal
FROM NGPCostPosition p