Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL中的净现值计算_Php_Mysql_Finance - Fatal编程技术网

Php MySQL中的净现值计算

Php MySQL中的净现值计算,php,mysql,finance,Php,Mysql,Finance,我有一个查询,它基于两个包含采购数据的表提供我的成本结构的损益视图 Select Left(A.Location, 5) as Site, A.Account, A.Category, A.Sub_Category, sum(If(Month(Inv.Invoice_Date)=1, A.Cost, 0)) as Jan, sum(If(Month(Inv.Invoice_Date)=2, A.Cost, 0)) as Feb, sum(If(Month(Inv.Invoice_Date)=3,

我有一个查询,它基于两个包含采购数据的表提供我的成本结构的损益视图

Select Left(A.Location, 5) as Site, A.Account, A.Category, A.Sub_Category,
sum(If(Month(Inv.Invoice_Date)=1, A.Cost, 0)) as Jan,
sum(If(Month(Inv.Invoice_Date)=2, A.Cost, 0)) as Feb,
sum(If(Month(Inv.Invoice_Date)=3, A.Cost, 0)) as Mar,
sum(If(Month(Inv.Invoice_Date)=4, A.Cost, 0)) as Apr,
sum(If(Month(Inv.Invoice_Date)=5, A.Cost, 0)) as May,
sum(If(Month(Inv.Invoice_Date)=6, A.Cost, 0)) as Jun,
sum(If(Month(Inv.Invoice_Date)=7, A.Cost, 0)) as Jul,
sum(If(Month(Inv.Invoice_Date)=8, A.Cost, 0)) as Aug,
sum(If(Month(Inv.Invoice_Date)=9, A.Cost, 0)) as Sep,
sum(If(Month(Inv.Invoice_Date)=10, A.Cost, 0)) as Oct,
sum(If(Month(Inv.Invoice_Date)=11, A.Cost, 0)) as Nov,
sum(If(Month(Inv.Invoice_Date)=12, A.Cost, 0)) as Dece,
sum(Inv.Cost) as Total,
From Table.A as A
Left join (Select Invoice_Number, Invoice_Line_Number, Invoice_Date, group by Invoice_Number, Invoice_Line_Number) as Inv
on Inv.Invoice_Number = A.Invoice_Number and Inv.Invoice_Line_Number = A.Invoice_Line_Number
Where Left(A.Location_Desc, 5) = 'TEX01'
and Year(Inv.Invoice_Date) = '2016'
Group by Site, Account, Category, Sub_Category
Having Total <> 0
;
到目前为止还不错。现在我需要做三件我一直在努力的事情:

1我需要在每个月列的底部有一个每月总成本行-这可能吗? 2在运行查询之前,我需要添加可以修改的变量行。例如,如果我发现一个投资机会可以将成本降低X个数量,我希望能够引入一行,从成本总额中减去该数量,以显示节省。 3我需要计算成本节约投资的净现值。这揭示了另一个问题。该查询的结构仅为提供1年的数据,但净现值计算需要5至10年的预测

最佳查询将平均出站点的成本,并用该平均值预测未来成本——然后引入通过新投资降低成本的可变行,并最终执行NPV计算,以确定投资是否值得追求

我的问题是:

a MySQL是实现这一点的合适工具吗? b我知道,从一个简单的select语句来看,这是不可能的-view语句在这里不起作用,因为我在select语句中有一个子查询。我是否应该构建一个新表,将查询的输出作为数据保存,并使用该表执行所有这些操作? 我应该研究编程语言/MySQL解决方案吗


谢谢

对于第一点,您可以通过以下查询获得结果

 Select Left(A.Location, 5) as Site, A.Account, A.Category, A.Sub_Category,
sum(If(Month(Inv.Invoice_Date)=1, A.Cost, 0)) as Jan,
sum(If(Month(Inv.Invoice_Date)=2, A.Cost, 0)) as Feb,
sum(If(Month(Inv.Invoice_Date)=3, A.Cost, 0)) as Mar,
sum(If(Month(Inv.Invoice_Date)=4, A.Cost, 0)) as Apr,
sum(If(Month(Inv.Invoice_Date)=5, A.Cost, 0)) as May,
sum(If(Month(Inv.Invoice_Date)=6, A.Cost, 0)) as Jun,
sum(If(Month(Inv.Invoice_Date)=7, A.Cost, 0)) as Jul,
sum(If(Month(Inv.Invoice_Date)=8, A.Cost, 0)) as Aug,
sum(If(Month(Inv.Invoice_Date)=9, A.Cost, 0)) as Sep,
sum(If(Month(Inv.Invoice_Date)=10, A.Cost, 0)) as Oct,
sum(If(Month(Inv.Invoice_Date)=11, A.Cost, 0)) as Nov,
sum(If(Month(Inv.Invoice_Date)=12, A.Cost, 0)) as Dece,
sum(Inv.Cost) as Total,
From Table.A as A
Left join (Select Invoice_Number, Invoice_Line_Number, Invoice_Date, group by Invoice_Number, Invoice_Line_Number) as Inv
on Inv.Invoice_Number = A.Invoice_Number and Inv.Invoice_Line_Number = A.Invoice_Line_Number
Where Left(A.Location_Desc, 5) = 'TEX01'
and Year(Inv.Invoice_Date) = '2016'
Group by A.Site, A.Account, A.Category, A.Sub_Category with ROLLUP Having Total <> 0 AND 
((a.Site is null or A.Account is not null) and (A.Account is null or A.Category is not null) and (A.Category is null or A.Sub_Category is not null));

对于第一点,您可以进行分组汇总。。。其他要点太难理解了。。。提供一些样本数据和所需的输出,以便容易理解问题。我不能用一组人来回避第一点,因为我希望结果是整个表+每月总数,按月汇总只会给我一个月总计,也可以包含在select with rollup中,以获得整个表的总计。您如何编写select语句来汇总月总计,同时在输出中保留分散的每月成本视图?我无法在select语句中编写GROUPBY子句。我应该使用子查询创建GROUPBY临时行并将其包含在select语句中吗?