是否有可能根据不同的where子句计算多个总量?例如:是否可以聚合不同的where子句?
比方说,我有两个表,一个用于发票,一个用于InvoiceLineItems。发票表中有一个发票总计字段,并且InvoiceLineItems表中的每个发票行项目记录都包含一个字段,该字段表示该行项目是否可以折扣。我需要三个总和,其中一个折扣= 0,一个折扣= 1,折扣无关。这样,我的输出将是:
InvoiceNumber Total DiscountableTotal NonDiscountableTotal
------------- ----- ----------------- --------------------
1 53.27 27.27 16.00
2 38.94 4.76 34.18
3...
我到目前为止发现的唯一方法是使用类似:
Select i.InvoiceNumber,
i.Total,
t0.Total As DiscountableTotal,
t1.Total As NonDiscountableTotal
From Invoices i
Left Join (
Select InvoiceNumber,
Sum(Amount),
From InvoiceLineItems
Where Discountable = 0
Group By InvoiceNumber
) As t0 On i.InvoiceNumber = t0.InvoiceNumber
Left Join (
Select InvoiceNumber,
Sum(Amount)
From InvoiceLineItems
Where Discountable = 1
Group By InvoiceNumber
) As t1 On i.InvoiceNumber = t1.InvoiceNumber
这似乎有些繁琐,这将是很好,如果我能做些什么像:
Select InvoiceNumber,
Sum(Amount) Where Discountable = 1 As Discountable
Sum(Amount) Where Discountable = 0 As NonDiscountable
Group By InvoiceNumber
我知道SQL是完全无效的,但它在逻辑上描绘什么,我试图做...
TIA
P.S.我需要这个在SQL Server 2000实例上运行,但是如果/我如何在SQL Server 2005/2008上实现这一点,我也感兴趣(以备将来参考)。
我不知道为什么我从来没有想到这一点...似乎很明显,现在它在我面前。谢谢。 – BenAlabaster 2010-12-22 18:54:19
+1代表第一个代码段。不直观,但它工作得很好。 – 2010-12-22 20:47:07