SQL Группировать по диапазону и общему столбцу

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

С помощью следующей функции и хранимой процедуры я получаю результирующий набор из 2 столбцов. Что мне нужно дополнительно, так это общая сумма в третьем столбце для всех открытых счетов-фактур внутреннего диапазона оценок, это было бы здорово для любой идеи.

   ALTER FUNCTION dbo.OpenOrders
    (
    @MandantId int
    )
  RETURNS TABLE
  AS
  RETURN
  SELECT        SUM(Invoices.Amount - ISNULL(Payment.Amount, 0)) AS Op
  FROM            Invoices INNER JOIN
                           Orders ON Invoices.OrderId = Orders.OrderId LEFT  OUTER JOIN
                           Payment ON Invoices.InvoiceId = Payment.InvoiceId
  WHERE        (Orders.MandantId = @MandantId)
  GROUP BY Invoice.InvoiceId, Invoices.Amount
  HAVING        (SUM(Invoices.Amount - ISNULL(Payment.Amount, 0)) <> 0)


  ALTER PROCEDURE dbo.GetOpRanges
  @MandantId int
  AS
  BEGIN

    SELECT * INTO #tmp_ranges

    FROM

    //wrong in first post -> OPDebitorByMandant(@MandantId)
    OpenOrders(@MandantId)

    SELECT  op AS [score range], COUNT(*) AS [number of occurences]
    FROM
    (SELECT CASE
      WHEN op BETWEEN 0 AND 50 THEN '  0- 50'
      WHEN op BETWEEN 50 AND 100 THEN ' 50-100' 
      WHEN op BETWEEN 100 AND 500 THEN '100-500' 
      ELSE '500 and >' END AS op
    FROM [#tmp_ranges]) AS t

    GROUP BY op

    RETURN

Result:
score range number of occurences range
------------------ -------------
  0- 50            23
 50-100            4
100-500            4
500 and >          21

What i need additional is a third column total for all open invoices inner score range.

Target result:
score range number of occurences Total
----------- -------------------- ------
  0- 50            23             1.150
 50-100            4                400
100-500            4              2.000
500 and >          21            22.000

      Tables:                                                                                                                                                                                 
    Invoices 
    InvoiceId  CustomerId OrderId DateOfInvoice Amount
    ---------- ---------- ------- ------------- ------
    1          1           20      20160301      1000.00
    2          2           22      20160501      2000.00
    3          1          102      20160601      3000.00
    ...

    Orders
    OrderId MandantId CustomerId DateOfOrder Amount
    ------- --------- ---------- ----------- -----------
     20     1         1          20160101     1000.00
     22     1         2          20160101     2000.00
    102     1         1          20160101     3000.00
    ...

    Payment
    PaymentId MandantId CustomerId InvoiceId OrderId DateOfPayment Amount 
    --------- --------- ---------- --------- ------- ------------- -------------
    1         1         1          1          20     20160310      1000.00
    2         1         2          2          22     20160505      2000.00
    3         1         1          3         102     20160610      3000.00
    ...
 

надеюсь, это поможет и еще раз заранее спасибо за любое решение

Комментарии:

1. Как найти открытые счета. Также добавьте образцы данных Invoices Orders и Payment таблиц.

2. Логика внутри функции также выглядит немного не так

3. Как вы ожидаете получить данные Third column - Total ?

4. как сказал @Prdp, как вы ожидаете получить хороший ответ, если вы не описали свои основные таблицы?

5. Надеюсь, теперь стало более понятно, что мне нужно. @Prdp