Можно ли рассчитать несколько агрегатов, основываясь на отличающихся выражениях где?Например:
Допустим, у меня есть две таблицы, одна для Invoice и одна для InvoiceLineItems.В таблице счетов-фактур есть общее поле для суммы счетов-фактур, и каждая из записей отдельных позиций счета-фактуры в таблице InvoiceLineItems содержит поле, которое указывает, является ли позиция дисконтируемой или нет.Мне нужны три итоговые суммы: одна, где Discountable = 0, и другая, где Discountable = 1, а другая, где Discountable не имеет значения.Таким образом, мой вывод будет:
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
PS Мне нужно это для запуска на экземпляре SQL Server 2000, но мне также интересно (для дальнейшего использования), если / как я бы достиг этого на SQL Server 2005/2008.