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谢谢!需要一些时间来测试。我会很快回复你的!谢谢需要一些时间来测试。我会很快回复你的!