powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Пользовательская функция с цепными расчетами
45 сообщений из 45, показаны все 2 страниц
Пользовательская функция с цепными расчетами
    #39572805
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Подскажите, можно ли в Microsoft SQL Server написать такую пользовательскую функцию, в которой передаются параметры, внутри функции выгружает нужные данные в соответствие переданными параметрами, делает расчеты и возвращает нужный результат?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Declare @StartDate date ='2017-11-01'
Declare @EndDate date ='2017-11-30'
Declare @КоличествоРасчетныхМер integer = 3

SELECT
	ТТ,
	SKU,
	ПользовательскаяФункция (ТТ, SKU, StartDate, EndDate, КоличествоРасчетныхМер)
FROM
	Таблица


Логика расчетов следующая. Пользовательская функция выгружает Мера1 и Мера2 при заданной ТТ и SKU по дням. А потом считает расчетные меры, причем так, что РасчетнаяМера3 зависит от РасчетнойМеры2 предыдущего дня, РасчетнаяМера2 зависит от РасчетнойМеры1 предыдущего дня, а РасчетнаяМера1 зависит от Мера1 и Мера2 текущих дней. Количество расчетных мер зависит от параметра КоличествоРасчетныхМер . И возвращает ПоследнююРасчетнуюМеру (в данном случае РасчетнаяМера3 ) от последней даты (в данном случае 30.11.2017), в данном случае - 8.

МераТТSKU01.11.201702.11.2017...29.11.201730.11.2017Мера1ТТ1SKU11020...90100Мера2ТТ1SKU11121...91101РасчетнаяМера1ТТ1SKU111...11РасчетнаяМера2ТТ1SKU132...11РасчетнаяМера3ТТ1SKU124...18
То есть в пользовательской функции происходят цепные расчеты.

Если да, то как это делается? И насколько сильно будет тормозить?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572842
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

Зависит от выбранного Вами способа реализации алгоритма.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572876
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вернее, функция возвращала, скажем, три значения, и каждое возвращаемое значение помещалось в соответствующую в отдельную колонку, чтобы для каждой колонки не вызывать повторно функцию. Так возможно?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572880
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkА вернее, функция возвращала, скажем, три значения, и каждое возвращаемое значение помещалось в соответствующую в отдельную колонку, чтобы для каждой колонки не вызывать повторно функцию. Так возможно?Читайте про табличные функции. Лучше - функции inline.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572881
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkА вернее, функция возвращала, скажем, три значенияА функции уже научились возвращать несколько значений?
Или вы так витиевато обозвали возврат таблицы?, и каждое возвращаемое значение помещалось в соответствующую в отдельную колонку, чтобы для каждой колонки не вызывать повторно функцию. Так возможно?Если функция табличная, то никаких проблем.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572882
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему это должна быть одна функция, а не несколько вызывающих друг друга?

И почему именно функция, а не процедура? Что функция, это осознанный выбор?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572884
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileА почему это должна быть одна функция, а не несколько вызывающих друг друга?

И почему именно функция, а не процедура? Что функция, это осознанный выбор?В общем случае процедуру в SELECT не вставишь
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572887
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkА вернее, функция возвращала, скажем, три значения, и каждое возвращаемое значение помещалось в соответствующую в отдельную колонку, чтобы для каждой колонки не вызывать повторно функцию. Так возможно?
Функция должна возвращать или одно значение, или таблицу. Соответственно, первую можно использовать в списке SELECT, а вторую - только вместо таблицы. Причем, функции, возвращающей таблицу, в качестве параметров, ничего кроме констант и локальных переменных передать нельзя.
В принципе, одно значение может инкапсулировать что угодно. Так что распарсить возвращаемую строку или XML можете и потом.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572889
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap, ну наверное я то понимаю в чем разница между ф-й и п-й, чай не первый десяток лет в теме.
Я автора спрашиваю нужен ли ему именно такой функционал, или он просто не задумывался о других вариантах.

По форме вопроса я вижу, что тут человек решает не задачу, а ищет ответ на вопрос "как сделать то что я считаю решением"


Вот у него задача "ездить в магазин по субботам", и он решил" куплю б/у ладу" и пришел на форум "посоветуйте как выбрать автотаз"

А может ему достаточно будет поставить убер на мобилу? Или посмотреть внимательно на карту, и понять что он добирается на мцк? А может у целевого магазина есть онлайн витрина с доставкой дешевле чем поездка на авто? Понимаете аналогию?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572891
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Причем, функции, возвращающей таблицу, в качестве параметров, ничего кроме констант и локальных переменных передать нельзя.cross(outer) apply уже запретили?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572897
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128,

авторФункция должна возвращать или одно значение, или таблицу. Соответственно, первую можно использовать в списке SELECT, а вторую - только вместо таблицы. Причем, функции, возвращающей таблицу, в качестве параметров, ничего кроме констант и локальных переменных передать нельзя.
В принципе, одно значение может инкапсулировать что угодно. Так что распарсить возвращаемую строку или XML можете и потом.
кажду фразу в мраморе высечь!
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572899
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmptr128Причем, функции, возвращающей таблицу, в качестве параметров, ничего кроме констант и локальных переменных передать нельзя.cross(outer) apply уже запретили?
Читайте, что я написал винмательно.
А еще тут
"TABLE
Specifies that the return value of the table-valued function is a table. Only constants and @local_variables can be passed to table-valued functions. "
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572903
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128invmпропущено...
cross(outer) apply уже запретили?
Читайте, что я написал винмательно.
А еще тут
"TABLE
Specifies that the return value of the table-valued function is a table. Only constants and @local_variables can be passed to table-valued functions. "
Забьемся на пять косариков, что я передм в табличную функцию параметры, которые не являются константой или переменной, м?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572907
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cammomileptr128пропущено...

Читайте, что я написал винмательно.
А еще тут
"TABLE
Specifies that the return value of the table-valued function is a table. Only constants and @local_variables can be passed to table-valued functions. "
Забьемся на пять косариков, что я передм в табличную функцию параметры, которые не являются константой или переменной, м?
В MS SQL много недокументированных возможностей. Но я предпочитаю их не использовать. Не зря они недокументированные.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572911
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Читайте, что я написал винмательно.Очень внимательно прочитал.
Теперь вы внимательно прочтите это .
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572919
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileИ почему именно функция, а не процедура? Что функция, это осознанный выбор?В общем, писал макрос в экселе, который выгружает данные с полями ТТ , SKU , Дата , Мера1 , Мера2 . Потом из всех имеющихся вариантов ТТ+SKU создается соответствующий экземпляр класса. Каждый экземпляр заполняется из исходных данных. Внутри каждого экземпляра происходят цепные расчеты. Получаем статистику по каждому экземпляру. Для каждого экземпляра можно построить детализированную таблицу. Но когда много ТТ+SKU, то очень долго считает. Время уходит на заполнение экземпляра из исходных данных (ищет нужные строки), а также на цепные расчеты. Хотелось бы это дело ускорить и попробовать передать в SQL-запрос. Пока остановился на пользовательской функции как вариант. Не знаю, может быть есть какие нибудь другие возможности для решения данной задачи. Вот и хотел бы узнать.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572925
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmptr128Читайте, что я написал винмательно.Очень внимательно прочитал.
Теперь вы внимательно прочтите это .

Спасибо! Давно не кодил, отстал от жизни (
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572926
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В идеале, если каждый экземпляр с данными бы сохранялся, чтобы потом заново не выгружать. А также потом вносить изменения в каких то экземплярах.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572927
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну например процедура которая делает каскад вычеслений.
Скажем так, со стороны клиента фиолетово как именно получается нужный ему датасет.
Ты, условно говоря, хочешь нажать в экселе кнопку "Сделать Расчет" и чтобы сервер все посчитал и вернул данные?

Функция для этого не нужна.

Оформлять код в виде функции имеет смысл когда ты хочешь обращаться к этому коду через SELECT
Вызывать его в аплае, например. Как мне кажется, это не твой вариант.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572928
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
В MS SQL много недокументированных возможностей. Но я предпочитаю их не использовать. Не зря они недокументированные.
Я буду пользоваться только документированными возможностями, готов рискнуть?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572931
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cammomileptr128
В MS SQL много недокументированных возможностей. Но я предпочитаю их не использовать. Не зря они недокументированные.
Я буду пользоваться только документированными возможностями, готов рискнуть?
Вы флудите дальше. Все равно от Ваших постов толку никому нет. )))
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572933
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileТы, условно говоря, хочешь нажать в экселе кнопку "Сделать Расчет" и чтобы сервер все посчитал и вернул данные? .Получается так.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572935
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Cammomileпропущено...

Я буду пользоваться только документированными возможностями, готов рискнуть?
Вы флудите дальше. Все равно от Ваших постов толку никому нет. )))
зато от вашего бреда одна польза, чего только xml стоит
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572942
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkCammomileТы, условно говоря, хочешь нажать в экселе кнопку "Сделать Расчет" и чтобы сервер все посчитал и вернул данные? .Получается так.
Ну значит с автомобилями я полностью угадал.
Не нужна тебе функция, делай процедуру, в которой описана твоя логика.
ИЛИ несколько процедур.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572944
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128Вы флудите дальше. Все равно от Ваших постов толку никому нет. )))
Ну т.е. ты влез непонятно зачем с непонятными заявками на мастерство, а когда тебе предложили подтвердить умения рублем, решил сьехать на ля-ля. Яснопонятно.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572945
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, SQL может создавать нужные экземпляры классов, в каждый экземпляр толкать соответствующие данные, без или дополнительных расчетов, и сохранять в соответствующем формате файла? Потом из экселя обращаться к этому файлу?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572946
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бро, у тебя каша в голове, извини.
СКУЛЬ это РЕЛЯЦИОННАЯ СУБД, предмет его управления -- ОТНОШЕНИЯ, по-простому наборы данных в виде таблиц.
За очень редким исключением.
ПОЭТОМУ ни о каких "экземпляров классов" у нас речи нет, и слава богу.
Тебе надо придумать как представить твои данные в табличном виде, и как представить твои вычисления в виде обработки (обработок) наборов строк.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572949
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileНе нужна тебе функция, делай процедуру, в которой описана твоя логика.
ИЛИ несколько процедур.И так, получается надо писать хранимую процедуру
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572952
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо взять ручку, бумажку, и нарисовать, и расписать, что у тебя есть и что ты хочешь получить.

Я так предполагаю, что у тебя есть набор параметров, который уникален для каждого "экземпляра класса" но в то же время вполне себе формализован.
Также, что у тебя есть некая цепочка расчетов, которая должна быть сделана индивидуально для каждого набора параметров.
А результаты рассчетов тебе надо куда то сложить, а потом посчитать некие агрегаты. Так?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572967
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cammomileptr128Вы флудите дальше. Все равно от Ваших постов толку никому нет. )))
Ну т.е. ты влез непонятно зачем
Нет. Я влез с конкретной инфомацией из документации. А вот Вы, не написав совершенно ничего полезного для ТС, занимались исключительно флудом и тешили свое ЧСВ.
Ошибаться могут все. И мне Вас жалко, если единственное, чем Вы можете себя порадовать, так это глумлением над чужими ошибками. Этакая форма публичного самоунижения )
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572972
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока я вижу, что твоя ссылка на документацию полезна тс-у примерно никак. А вот мое "глумление" как-минимум поможет ему формализовать задачу и выбрать инструмент для её решения.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572992
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileНадо взять ручку, бумажку, и нарисовать, и расписать, что у тебя есть и что ты хочешь получить.

Я так предполагаю, что у тебя есть набор параметров, который уникален для каждого "экземпляра класса" но в то же время вполне себе формализован.
Также, что у тебя есть некая цепочка расчетов, которая должна быть сделана индивидуально для каждого набора параметров.
А результаты рассчетов тебе надо куда то сложить, а потом посчитать некие агрегаты. Так?Да
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39572997
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда единственный принципиальный вопрос - как сформировать этот твой набор параметров в виде таблицы и сунуть его туда куда надо.

Я имею в виду то, что пройтись по каждой строчке датасета и вызвать для нее некую процедуру это одна история, а сунуть набор строк внутрь процедуры, которая посчитает все - несколько другая.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573490
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileНадо взять ручку, бумажку, и нарисовать, и расписать, что у тебя есть и что ты хочешь получить.До этого прописывал в VBA с помощью классов. Описываю на языке реляционных таблиц.
Исходные данныеТТSKUДатаМера1Мера2ТТ1SKU101.10.2017101201ТТ1SKU102.10.2017102202ТТ1SKU103.10.2017103203ТТ1SKU104.10.2017104204ТТ1SKU105.10.2017105205ТТ1SKU106.10.2017106206ТТ1SKU107.10.2017107207ТТ1SKU108.10.2017108208ТТ1SKU109.10.2017109209ТТ1SKU110.10.2017110210ТТ1SKU201.10.2017111211ТТ1SKU202.10.2017112212ТТ1SKU203.10.2017113213ТТ1SKU204.10.2017114214ТТ1SKU205.10.2017115215ТТ1SKU206.10.2017116216ТТ1SKU207.10.2017117217ТТ1SKU208.10.2017118218ТТ1SKU209.10.2017119219ТТ1SKU210.10.2017120220...............

Справочная таблица по SKUSKUКоличествоРасчетныхМерSKU15SKU27SKU35......

Список экземпляров класса СценарийТТSKUДатаНачалаДатаОкончанияТТ1SKU101.10.201707.10.2017ТТ1SKU102.10.201708.10.2017ТТ1SKU103.10.201709.10.2017ТТ1SKU104.10.201710.10.2017ТТ1SKU201.10.201707.10.2017ТТ1SKU202.10.201708.10.2017ТТ1SKU203.10.201709.10.2017ТТ1SKU204.10.201710.10.2017............

Строки в экземплярах ДанныеТТSKUДатаНачалаДатаОкончанияДатаМера1Мера2ТТ1SKU101.10.201707.10.201701.10.2017101201ТТ1SKU101.10.201707.10.201702.10.2017102202ТТ1SKU101.10.201707.10.201703.10.2017103203ТТ1SKU101.10.201707.10.201704.10.2017104204ТТ1SKU101.10.201707.10.201705.10.2017105205ТТ1SKU101.10.201707.10.201706.10.2017106206ТТ1SKU101.10.201707.10.201707.10.2017107207ТТ1SKU102.10.201708.10.201702.10.2017102202ТТ1SKU102.10.201708.10.201703.10.2017103203ТТ1SKU102.10.201708.10.201704.10.2017104204ТТ1SKU102.10.201708.10.201705.10.2017105205ТТ1SKU102.10.201708.10.201706.10.2017106206ТТ1SKU102.10.201708.10.201707.10.2017107207ТТ1SKU102.10.201708.10.201708.10.2017108208.....................

Подстроки в экземплярах ДанныеТТSKUДатаНачалаДатаОкончанияДатаМера1Мера2 КоличествоРасчетныхМерРасчетнаяМераПолученноеЗначениеТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера1ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера2ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера3ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера4ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера5ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМераДругаяТТ1SKU101.10.201707.10.201701.10.20171012015ИтоговаяРасчетнаяМера...........................ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера1ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера2ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера3ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера4ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера5ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера6ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера7ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМераДругаяТТ1SKU201.10.201707.10.201701.10.20171112117ИтоговаяРасчетнаяМера..............................


1. Описание может быть не совсем оптимальное, то есть что то лишние, что то не достает. Из строки в колонки, или наоборот, из колонки в строки. Если что, то, пожалуйста, поправьте. Важно, чтобы структура была такая, что при выгрузке не тормозило сильно.

2. Для Строки в экземплярах Данные как строки будут обращаться в предыдущие строки? Важно, чтобы посчиталось последовательно: РасчетнаяМера1, РасчетнаяМера2, ..., РасчетнаяМера5, РасчетнаяМераДругая, ИтоговаяРасчетнаяМера.

ТТSKUДатаНачалаДатаОкончанияДатаМера1Мера2 КоличествоРасчетныхМерРасчетнаяМераПолученноеЗначениеТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера1ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера2
Как вторая строка может обратиться к первой строке?

ТТSKUДатаНачалаДатаОкончанияДатаМера1Мера2 КоличествоРасчетныхМерРасчетнаяМераПолученноеЗначениеТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера1ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера2ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера3ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера4ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМера5ТТ1SKU101.10.201707.10.201701.10.20171012015РасчетнаяМераДругаяТТ1SKU101.10.201707.10.201701.10.20171012015ИтоговаяРасчетнаяМера

ТТSKUДатаНачалаДатаОкончанияДатаМера1Мера2 КоличествоРасчетныхМерРасчетнаяМераПолученноеЗначениеТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера1ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера2ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера3ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера4ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера5ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера6ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМера7ТТ1SKU201.10.201707.10.201701.10.20171112117РасчетнаяМераДругаяТТ1SKU201.10.201707.10.201701.10.20171112117ИтоговаяРасчетнаяМераКак можно просуммировать по всем расчетным мерам (кроме РасчетнаяМераДругая )?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573513
Goga-Gola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
...OUTER APPLY (... 

?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573528
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак вторая строка может обратиться к первой строке?
Зависит от версии сервера. В современном мире LAG
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/lag-transact-sql

Считать можно например последовательными апдейтами, или аплай на аплай на аплай. В зависимости от сложности твоих мер и обьемов данных.

Кстати за что отвечает параметр "количество мер"?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573538
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, совсем непонятно почему ты так зациклился на том, что "строка должна смотреть на предыдущую".

У тебя не строка должна смотреть, а ВЫЧИСЛЕНИЕ. Думай функционально, Меры это же некие функции?

Тебе надо посчитать Ф1, из ее рассчетов взять данные сунть в Ф2 и так далее, да?

Ну и пожалуйста, можно например так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
DECLARE @T Table 
( RN int, Code varchar (4), SomeParameter int  ) 

INSERT INTO @T SELECT 1, 'SKU1', 2
INSERT INTO @T SELECT 2, 'SKU1', 4
INSERT INTO @T SELECT 3, 'SKU1', 6
INSERT INTO @T SELECT 5, 'SKU2', 100
INSERT INTO @T SELECT 6, 'SKU2', 200

SELECT T.*, '#'
,  Measure1.M1
,  Measure2.M2 
,  Measure3.M3
FROM  @T T
CROSS APPLY (SELECT T.SomeParameter + 10 AS M1) Measure1 
CROSS APPLY (SELECT Measure1.M1 * 0.1  AS M2) Measure2 
CROSS APPLY (SELECT Measure1.M1  + Measure2.M2  AS M3) Measure3
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573718
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileКстати за что отвечает параметр "количество мер"?У каждого SKU есть свой срок годности. РасчетнаяМера1 - остаток на 1-й день по сроку годности. РасчетнаяМера2 - остаток на 2-й по сроку годности. И т. д. То есть на определенную дату видим сколько продукции на остатке с определенным днем по сроку годности. И если на следующий день SKU не продан и срок годности прошел, то превращается в возврат - РасчетнаяМераДругая . То есть на каждый день видим непросроченный и просроченный остаток.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573737
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileИ еще, совсем непонятно почему ты так зациклился на том, что "строка должна смотреть на предыдущую".

У тебя не строка должна смотреть, а ВЫЧИСЛЕНИЕ. Думай функционально, Меры это же некие функции?
- Чтобы посчитать остаток на 1-й день по сроку годности нужно вытащить отгрузку и продажу текущего дня.
- Чтобы посчитать остаток на 2-й день по сроку годности нужно вытащить остаток на 1-й день по сроку годности предыдущего дня и продажу текущего дня.
- Чтобы посчитать возврат нужно вытащить остаток на последний день по сроку годности.
- Чтобы посчитать общий не просроченный остаток нужно сложить все остатки на разные дни по сроку годности.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573742
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот и отлично, у тебя 5 однотипных для всех видов товаров вычислений, которые ты можешь вызывать последовательно. Любым вменяемым способом.

В конце-концов можно временную таблицу апдейтить нужное количество раз - отличный способ если делаешь процку.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573759
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileНу вот и отлично, у тебя 5 однотипных для всех видов товаров вычислений , которые ты можешь вызывать последовательно. Любым вменяемым способом. Учитывая, что для меры Остатка на первый день по сроку годности по сравнению остальными мерами не смотрит на предыдущую дату.

В конце-концов можно временную таблицу апдейтить нужное количество раз - отличный способ если делаешь процку.Что за процка?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573868
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[/quot]Что за процка?[/quot]
Которую ты напишешь чтобы делать свои расчеты, или не напишешь.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39573914
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

Может вам оконные функции выучить, а не заниматься исхищрениеми с функциями ?
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39574168
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninferzmikk,

Может вам оконные функции выучить, а не заниматься исхищрениеми с функциями ?Я предполагал вначале, что пользовательская функция сможет решить данную задачу. С оконными функциями не работал еще.
...
Рейтинг: 0 / 0
Пользовательская функция с цепными расчетами
    #39574171
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CammomileТебе надо посчитать Ф1, из ее рассчетов взять данные сунть в Ф2 и так далее, да?

Ну и пожалуйста, можно например так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
SELECT T.*, '#'
,  Measure1.M1
,  Measure2.M2
,  Measure3.M3
FROM  @T T
CROSS APPLY (SELECT T.SomeParameter + 10 AS M1) Measure1 
CROSS APPLY (SELECT Measure1.M1 * 0.1  AS M2) Measure2 
CROSS APPLY (SELECT Measure1.M1  + Measure2.M2  AS M3) Measure3


Следует учесть что у каждого SKU свой срок годности, следовательно, свое количество расчетных колонок. Важно чтобы количество Measure было динамическое.
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Пользовательская функция с цепными расчетами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]