SQL процент столбца (с несколькими группами по) - PullRequest
0 голосов
/ 29 февраля 2020

Контекст

У меня есть это представление / выставка, в котором перечислены записи с датой отправки, именем клиента, позицией клиента, типом отказа, итоговой суммой IDClientPosition и итоговой суммой IDRefusal. Я использую его, чтобы проверить, сколько претензий, отправленных на каждую дату, было принято, отклонено и почему им отказал каждый клиент (У меня есть связанные таблицы для использования для ClientPosition, Refusal и Client)

  DtSent    |  IDClient | IDClientPosition | TOTAL Position | IDRefusal | TOTAL Refusal
---------------------------------------------------------------------------------------------
2020-01-10         1             1                 40           NULL           0
2020-01-10         1             1                 3              7            3
2020-01-10         1             2                 1            NULL           0
2020-02-10         2             2                 27             1           27
2020-02-10         2             2                 13             2           13    

Запрос до сих пор, который показывает вышеуказанные значения:

SELECT        TOP (100) PERCENT dbo.LBA.DtSent, dbo.Claims.IDClient, dbo.LBA.IDClientPosition, 
           COUNT(dbo.LBA.IDClientPosition) AS [TOTAL Position], dbo.LBA.IDRefusal, 
           COUNT(dbo.LBA.IDRefusal) AS [TOTAL Refusal]
FROM            dbo.LBA INNER JOIN
             dbo.ClientPositionLBA ON dbo.LBA.IDClientPosition = 
             dbo.ClientPositionLBA.IDClientPositLBA LEFT OUTER JOIN
             dbo.RefusalLBA ON dbo.LBA.IDRefusal = dbo.RefusalLBA.IDRefusal LEFT OUTER JOIN
             dbo.Claims LEFT OUTER JOIN
             dbo.Clients ON dbo.Claims.IDClient = dbo.Clients.IDClients ON 
             dbo.LBA.ClaimID = dbo.Claims.ClaimID
GROUP BY dbo.LBA.IDClientPosition, dbo.Claims.IDClient, dbo.LBA.IDRefusal, dbo.LBA.DtSent

Что я хотел бы

Я хотел бы добавить 2 столбца для процентов, основываясь на значениях ПОЛНОЙ Позиции и ПОЛНОГО ОТКАЗА.

При этом, помимо общих значений, которые у меня уже есть (количество), я мог бы также узнайте, сколько процентов заявок было принято, отклонено и с каким обоснованием (IDRefusal) на эту дату для каждого клиента. Подводя итог, это похоже на преобразование этих общих значений в процент.

В месяц должно быть около 100 записей на клиента в общей сложности 20 клиентов, поэтому необходимо учитывать производительность. Я пробовал разные вещи, которые нашел в Интернете, но безрезультатно.

1 Ответ

0 голосов
/ 29 февраля 2020

Просто разделите на общее количество:

COUNT(dbo.LBA.IDClientPosition) * 1.0 / COUNT(*),
COUNT(dbo.LBA.IDRefusal) * 1.0 / COUNT(*)

* 1.0 потому, что в некоторых базах данных есть целочисленное деление. * 1.0 создает число с десятичной дробью, поэтому расчет будет более точным.

...