Как создать вычисляемые столбцы в SQL с помощью sql оконных функций? - PullRequest
0 голосов
/ 25 января 2020

Итак, я работаю над этим решением, которое включает выборку из трех столбцов, например «Год», «Месяц» и «Расход», и использую их для создания другого столбца «Итого за год», используя logi c, который имитирует SQL оконные функции. Например, мне нужна следующая таблица, учитывая, что первые три столбца доступны для редактирования:

|------------|-------|--------|----------|
|   Year     |Month  |  Spend |Year Total|
|------------|-------|--------|----------|
|    2018    |   Jan |  10    |   55     |
|    2018    |   Feb |  20    |   55     |
|    2018    |   Oct |  25    |   55     |
|    2019    |   Jan |  15    |   120    |
|    2019    |   Aug |  60    |   120    |
|    2019    |   Nov |  45    |   120    |
|------------|-------|--------|----------|

Но вычисление этого во внешнем интерфейсе и на лету делает решение очень медленным. Поэтому я пытаюсь переместить этот расчет в бэкэнд в таблице SQL, используя вычисляемые столбцы. В основном, данные будут записаны в бэкэнд (SQL), вычислены столбцы и перечитаны для показа во внешнем интерфейсе.

Я немного осмотрелся, но обнаружил, что функции windows нельзя использовать в вычисляемых столбцах в SQL. Кроме того, обратите внимание, что хранимые процедуры не разрешены в решении.

Кто-нибудь может подсказать, как это сделать, или даже если это вообще возможно?

Обратите внимание, что веб-интерфейс Powerapps / Power BI

Ответы [ 2 ]

1 голос
/ 25 января 2020

«используя logi c, который имитирует SQL -оконные функции», почему?

Вам просто нужно присоединиться к подзапросу, который группируется по годам.

select t.* , s.sumspend
from <table> t
join (select year, sum(spend) sumspend from <table> group by year) s
on s.year = t.year;
0 голосов
/ 25 января 2020

Использовать представление:

create view v_t as
    select t.* ,
           sum(spend) over (partition by year) as year_spend
    from t;

Оконные функции не допускаются в сгенерированных столбцах.

SQL Сервер разрешает оконные функции в обновляемых представлениях, поэтому вы сможете изменять другие столбцы. Вам нужно будет перезагрузить таблицу всякий раз, когда вносятся изменения, чтобы получить обновленные данные.

...