2017-10-21 103 views
1

希望下面的代码应该证明我想要实现的。汇总函数结果在选择语句

问题是,当我尝试计算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 
+0

计算vatable现金时,你可以重复用于orderlinenetprice,orderlinegrossprice和totalcashamount计算,移动的vatable现金计算外查询,或者使用一个CTE(这实际上是一回事)。 –

回答

2

您需要使用子查询。

你可以试试这个。

;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 
+0

谢谢!需要一些时间来测试。将很快回复你! –

1

爱交申请!每当你想要一些方便的额外列时使用它。

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 
+0

小问题是我认为我也必须使用'OrderLineNetPrice'和'OrderLineGrossPrice'来完成它,如果是这种情况,我正考虑使用下面的子查询解决方案。我现在不能测试,所以我会尽可能地检查它们。谢谢! –

+0

如果需要,您可以将这些添加到其他交叉应用: 交叉应用(选择总和(OrderLine.NetPrice)作为OrderLineNetPrice, sum(OrderLine.GrossPrice)作为OrderLineGrossPrice)作为sumsquery –