Sql 聚合函数结果在select语句中
希望下面的代码能够演示我要实现的目标 问题是,在我尝试计算Sql 聚合函数结果在select语句中,sql,sql-server,tsql,azure-sql-database,Sql,Sql Server,Tsql,Azure Sql Database,希望下面的代码能够演示我要实现的目标 问题是,在我尝试计算VatableCash时,没有一个输入选择得到解决,因此我在尝试选择它时得到了“无效列” 很抱歉,如果这里有明显的事情我可以做。SQL不是我的强项之一 select OrderHeader.ID, sum(OrderLine.NetPrice) as OrderLineNetPrice, sum(OrderLine.GrossPrice) as OrderLineGrossPrice, sum(
VatableCash
时,没有一个输入选择得到解决,因此我在尝试选择它时得到了“无效列”
很抱歉,如果这里有明显的事情我可以做。SQL不是我的强项之一
select
OrderHeader.ID,
sum(OrderLine.NetPrice) as OrderLineNetPrice,
sum(OrderLine.GrossPrice) as OrderLineGrossPrice,
sum(
case when PaymentOption_ID = 8
then Payment.Amount
else 0
end
) as TotalCashAmount,
((OrderLineGrossPrice - OrderLineNetPrice) / OrderLineGrossPrice) * TotalCashAmount as VatableCash
from OrderHeader
inner join Payment on Payment.OrderHeader_ID = OrderHeader.ID
inner join OrderLine on OrderLine.OrderHeader_ID = OrderHeader.ID
group by OrderHeader.ID
您需要使用子查询 你可以试试这个
;WITH CTE AS
(
select
OrderHeader.ID,
sum(OrderLine.NetPrice) as OrderLineNetPrice,
sum(OrderLine.GrossPrice) as OrderLineGrossPrice,
sum(
case when PaymentOption_ID = 8
then Payment.Amount
else 0
end
) as TotalCashAmount
from OrderHeader
inner join Payment on Payment.OrderHeader_ID = OrderHeader.ID
inner join OrderLine on OrderLine.OrderHeader_ID = OrderHeader.ID
group by OrderHeader.ID
)
SELECT *,
((OrderLineGrossPrice - OrderLineNetPrice) / OrderLineGrossPrice) * TotalCashAmount as VatableCash
FROM CTE
您需要使用子查询 你可以试试这个
;WITH CTE AS
(
select
OrderHeader.ID,
sum(OrderLine.NetPrice) as OrderLineNetPrice,
sum(OrderLine.GrossPrice) as OrderLineGrossPrice,
sum(
case when PaymentOption_ID = 8
then Payment.Amount
else 0
end
) as TotalCashAmount
from OrderHeader
inner join Payment on Payment.OrderHeader_ID = OrderHeader.ID
inner join OrderLine on OrderLine.OrderHeader_ID = OrderHeader.ID
group by OrderHeader.ID
)
SELECT *,
((OrderLineGrossPrice - OrderLineNetPrice) / OrderLineGrossPrice) * TotalCashAmount as VatableCash
FROM CTE
爱十字架!只要你想要一些方便的额外栏目,就可以使用它
select
OrderHeader.ID,
sum(OrderLine.NetPrice) as OrderLineNetPrice,
sum(OrderLine.GrossPrice) as OrderLineGrossPrice,
TotalCashAmount,
((OrderLineGrossPrice - OrderLineNetPrice) / OrderLineGrossPrice) * TotalCashAmount as VatableCash
from OrderHeader
inner join Payment on Payment.OrderHeader_ID = OrderHeader.ID
inner join OrderLine on OrderLine.OrderHeader_ID = OrderHeader.ID
cross apply ( select sum(
case when PaymentOption_ID = 8
then Payment.Amount
else 0
end
)) as subquery(TotalCashAmount)
group by OrderHeader.ID
爱十字架!只要你想要一些方便的额外栏目,就可以使用它
select
OrderHeader.ID,
sum(OrderLine.NetPrice) as OrderLineNetPrice,
sum(OrderLine.GrossPrice) as OrderLineGrossPrice,
TotalCashAmount,
((OrderLineGrossPrice - OrderLineNetPrice) / OrderLineGrossPrice) * TotalCashAmount as VatableCash
from OrderHeader
inner join Payment on Payment.OrderHeader_ID = OrderHeader.ID
inner join OrderLine on OrderLine.OrderHeader_ID = OrderHeader.ID
cross apply ( select sum(
case when PaymentOption_ID = 8
then Payment.Amount
else 0
end
)) as subquery(TotalCashAmount)
group by OrderHeader.ID
在计算增值税现金时,您可以重复计算orderlinenetprice、orderlinegrossprice和totalcashamount,将增值税现金的计算移动到外部查询或使用cte(实际上也是一样)。您可以重复计算orderlinenetprice,orderlinegrossprice和totalcashamount计算增值税现金时,将增值税现金的计算移动到外部查询或使用cte(实际上是相同的).小问题是,我认为我还必须使用
OrderLineNetPrice
和OrderLineGrossPrice
来实现这一点,如果是这种情况,我会考虑使用下面的子查询解决方案。不过我现在不能测试,所以我会在可以的时候检查它们。谢谢如果需要,可以将它们添加到其他交叉应用中:交叉应用(选择sum(OrderLine.NetPrice)作为OrderLineNetPrice,选择sum(OrderLine.GrossPrice)作为OrderLineGrossPrice)作为Sumsky的一个小问题是,我认为我还必须使用OrderLineNetPrice
和OrderLineGrossPrice
来实现这一点,如果是这样的话,我会考虑使用下面的子查询解决方案。不过我现在不能测试,所以我会在可以的时候检查它们。谢谢如果需要,您可以将它们添加到其他交叉应用中:交叉应用(选择sum(OrderLine.NetPrice)作为OrderLineNetPrice,选择sum(OrderLine.GrossPrice)作为OrderLineGrossPrice)作为sumsquery谢谢!需要一些时间来测试。我会很快回复你的!谢谢需要一些时间来测试。我会很快回复你的!