Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
avec Member Откуда: Москва Сообщений: 826 |
Есть ли в SQL Server 2000 функция минимума, но чтобы она возвращала не минимум в столбце, а минимум из значений нескольких полей одной строки? |
23 июн 04, 18:29 [761386] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37116 |
Нету. А для чего такое понадобилось? |
23 июн 04, 18:32 [761393] Ответить | Цитировать Сообщить модератору |
ChA Member Откуда: Москва Сообщений: 11201 |
Если бы такое было, было бы замечательно, но такого нет. Как вариант, можно конкатенировать поля в одно бинарное выражение и брать минимум от него, с дальнейшим обратным преобразованием. |
23 июн 04, 18:35 [761398] Ответить | Цитировать Сообщить модератору |
avec Member Откуда: Москва Сообщений: 826 |
а в фоксе это было очень удобно :-( |
23 июн 04, 18:37 [761401] Ответить | Цитировать Сообщить модератору |
josia Member Откуда: http://exactpro.com Сообщений: 482 |
DECLARE @a int, @b int SET @a=5 SET @b=3 SELECT CASE WHEN @a<@b THEN @a ELSE @b END |
23 июн 04, 18:41 [761416] Ответить | Цитировать Сообщить модератору |
alexia Member Откуда: Санкт-Петербург Сообщений: 460 |
2josia гы, а если колонок, скажем, с десяток? |
23 июн 04, 18:43 [761420] Ответить | Цитировать Сообщить модератору |
josia Member Откуда: http://exactpro.com Сообщений: 482 |
если десяток то проблем нет, проблема есть если 11 |
23 июн 04, 18:48 [761429] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
Пишется UDF , а потом вызывается как MyMin( MyMin(a, b), c) |
23 июн 04, 18:56 [761442] Ответить | Цитировать Сообщить модератору |
avec Member Откуда: Москва Сообщений: 826 |
|
||
23 июн 04, 19:02 [761455] Ответить | Цитировать Сообщить модератору |
ChA Member Откуда: Москва Сообщений: 11201 |
Ахха, опять неправильно понял вопрос... Sorry |
23 июн 04, 19:06 [761465] Ответить | Цитировать Сообщить модератору |
josia Member Откуда: http://exactpro.com Сообщений: 482 |
безобразие :( почему UDF вложить в саму себя 11 раз можно, а такую нужную и красивую вещь как 11 вложенных CASE сделать нельзя. |
23 июн 04, 19:12 [761476] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
11 вложенных CASE... Я попробовал представить... Не, не получается, пошел за пивом! |
23 июн 04, 21:17 [761628] Ответить | Цитировать Сообщить модератору |
MustDie Member Откуда: Подмосковье Сообщений: 229 |
Что-то тут с нормализацией, мне кажется, не так.... Но раз уж такое понадобилось, я бы через временную табличку сделал бы, ибо ленив я очень CASE-ы всякие делать да переменные описывать. Ну а чтобы для каждого поля, из которых надо MIN искать, не перебирать всю таблу отдельным селектом, взял бы курсор по нужным полям соотв. записи. Но все это разумно, если MIN нужон по многим полям, а если их два-три то можно и ручками сравнить... Проверено, MIN нет! |
24 июн 04, 01:16 [761737] Ответить | Цитировать Сообщить модератору |
ChA Member Откуда: Москва Сообщений: 11201 |
Если уж писать функцию MyMin, так не с двумя параметрами, а внутри хоть засравнивайся. Пардон мой фрацузский... |
24 июн 04, 01:31 [761743] Ответить | Цитировать Сообщить модератору |
ChA Member Откуда: Москва Сообщений: 11201 |
Кстати, навеяло
|
||
24 июн 04, 01:58 [761753] Ответить | Цитировать Сообщить модератору |
Breakneck Member Откуда: Kiev Сообщений: 2454 |
ИМХО, самый лучший способ - транспонировать строку в столбец и применить туда MIN. |
24 июн 04, 10:49 [762263] Ответить | Цитировать Сообщить модератору |
Сергей Васкецов Member Откуда: Сообщений: 20362 |
[quot MustDie]Что-то тут с нормализацией, мне кажется, не так[quot] Отчего же? Представьте себе состав книги покупок/продаж. Если она электронная, документы в ней отражаются по критерию попадания в диапазон дат. Для коммерческого документа с его оплатой, "мечтающего" попасть в книгу, может быть определено как минимум 4 даты (дата документа, оплаты, прихода, получения), вот и приходится расчитывать дату отражения как максимум из 4-х полей каждой строки. |
24 июн 04, 11:25 [762396] Ответить | Цитировать Сообщить модератору |
Luchkin Dmitry Member Откуда: Новосибирск -> Ангарск -> Братск -> Мск Сообщений: 1921 |
2 Сергей Васкецов: А вот в этом примере -- однозначно с нормализацией, да и вообще с логикой проблемы большие. но уж с этим государством нам жить.... |
24 июн 04, 11:34 [762443] Ответить | Цитировать Сообщить модератору |
Николай МВ Member Откуда: Ukraine-Kyiv Сообщений: 328 |
(дата документа, оплаты, прихода, получения) И для каждой даты отдельный столбец? Это вообще разные документы: документ оплаты, документ прихода... Что такое "документ получения" и в чем его отличие от "документа прихода"? А еще бывают документы вступительного баланса, остатков, пересортицы, перемещения, передачи на комиссию, возврата... Вы правда столько столбцов будете заводить? :) |
24 июн 04, 11:42 [762472] Ответить | Цитировать Сообщить модератору |
alexia Member Откуда: Санкт-Петербург Сообщений: 460 |
В данном случае однозначно все даты нужно убирать в др. таблицу. И признак еще в нее добавить, типа, что это за дата такая. А потом уже функцию min на полную катушку юзать. |
24 июн 04, 12:00 [762578] Ответить | Цитировать Сообщить модератору |
Сергей Васкецов Member Откуда: Сообщений: 20362 |
1) Мягко говоря, не все перечисленные Вами документы попадают в книги покупок продаж, кои сами по себе разные бывают. 2) С нормализацией никаких проблем как раз нет, если документ оплачен частями и отражает событие ОС (например, начало амортизации), он отражается столько раз, сколько есть оплат, однако, по последнему событию ОС (таково наше законодательство), и спорить с этим бесполезно. 3) Все 4 и более дат в примере состава книг покупок - это свойство даже не документа и даже не его оплаты, а свойство оплаты, которая соотносится на строку документа. 4) Рассмотрим книгу покупок по налоговым документам. Согласно нашему @#$-му законодательству, строится она по оплатам. Документ прихода - это акт перехода права собственности, например, относительно ничего не имеющий общего с налоговым документом, который отражается в книге. Дата получения же устанавливается непосредственно на налоговый документ, когда ОН ПОЛУЧЕН. Кстати, "документ поулчения" и "документ прихода" я не писал, шла речь о ДАТАХ.
Представьте себе миллиона полтора документов с составом порядка десяти позиций (есть как 1-2, так и сотни, это данные по весьма средненькому холдингу), если каждая номенклатура отражается по событиям ОС и документ полностью оплачивается, верхний оценочный предел количества записей (оплат строк состава), которые попадут в книгу, получается порядка 100 миллионов (обычно меньше в разы, но все же достаточно). Вы предлагаете, как я понимаю, рядом сделать табличку, в которой будет до 400 миллионов записей, которая будет ссылаться по составному ключу как минимум из 3-х numeric-ов (INT на таких объемах успешно переполняется и отдыхает, 3 - потому что как я уже писал, пары ID строки документа и ID оплаты документа недостаточно), там будет 4 даты и еще признак, что это за дата. Попробуйте оценить размер этой таблички на досуге и сами себе честно ответьте, достойная ли это замена CASE-у с выбором максимума по 4-м датам. Особенно с учетом того, что для некоторых типов документов дата отражения в точности равна дате документа (остальные либо заведомо не больше, либо вообще не определяются, например, авансовый счет-фактура), так что выбор максимума просто излишен. |
||||
24 июн 04, 13:09 [762895] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |