преобразовать три столбца в проценты для строки - PullRequest
0 голосов
/ 17 июня 2020

Я не знаю, как лучше всего выразить это словами, но ниже мои данные, и я пытаюсь создать запрос, который будет выводить каждый столбец в виде процентов от трех элементов ca sh, planpay, govt

данные столбца:

1

вывод будет таким:

2

Я пробовал это

select str_nbr ,(sum(cast(planpay as float) / (sum(cast (planpay as float) + sum (cast (cash as float) + sum (cast (govt as float))) 

from Insurance where str_nbr in ( '15308') group by str_nbr 

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы можете просто использовать деление. Если вы не хотите повторять вычисления, используйте apply:

select t.str_nbr,
       t.cash * 100.0 / v.total as cash_pct,
       t.planpay * 100.0 / v.total as planpay_pct,
       t.govt * 100.0 / v.total as govt_pct
from t cross apply
     (values (cash + planpay + govt)) v(total)

Обратите внимание, что SQL Server выполняет целочисленное деление. Итак, если значения являются целыми числами, тогда 1 / 2 будет 0, а не 0.5. * 100.0 исправляет это.

0 голосов
/ 17 июня 2020

Просто сделайте то же logi c, что и в Excel, но в T- SQL. Избегайте повторения с CTE

with cte as (
  select
    str_nbr,
    CASH,
    PLANPAY,
    GOVT,
    CASH + PLANPAY + GOVT as total
  from Insurance
)
select
  str_nbr as store,
  100.0 * CASH    / total as cash,
  100.0 * PLANPAY / total as planpay,
  100.0 * GOVT    / total as govt
from cte;
...