Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> max значение в строке 
V
    Опции темы
TaNK
Дата 16.2.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Всем привет, возник вопрос - есть 12  данных, и необходимо найти max значение в строке, есть идея такая
Код

(case when (DOG.exp1 > DOG.exp2 and DOG.exp1 > DOG.exp3 and DOG.exp1 > DOG.exp4 and DOG.exp1 > DOG.exp5 and DOG.exp1 > DOG.exp6 and DOG.exp1 > DOG.exp7 and DOG.exp1 > DOG.exp8 and DOG.exp1 > DOG.exp9 and DOG.exp1 > DOG.exp10 and DOG.exp1 > DOG.exp11 and DOG.exp1 > DOG.exp12) then DOG.exp1
                  else -- exp2 max
                       (case when (DOG.exp2 > DOG.exp1 and DOG.exp2 > DOG.exp3 and DOG.exp2 > DOG.exp4 and DOG.exp2 > DOG.exp5 and DOG.exp2 > DOG.exp6 and DOG.exp2 > DOG.exp7 and DOG.exp2 > DOG.exp8 and DOG.exp2 > DOG.exp9 and DOG.exp2 > DOG.exp10 and DOG.exp2 > DOG.exp11 and DOG.exp2 > DOG.exp12) then DOG.exp2
                  else --exp3 max

но MSQ SQL2000 оператор case  поддерживает до 10 уровней вложений, может есть проще способ, нахождения такого значения?
Заранее спасибо.


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
TaNK
Дата 16.2.2009, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Код

(case 
               when (DOG.exp1  > DOG.exp2 and DOG.exp1 > DOG.exp3 and DOG.exp1 > DOG.exp4 and DOG.exp1 > DOG.exp5 and DOG.exp1 > DOG.exp6 and DOG.exp1 > DOG.exp7 and DOG.exp1 > DOG.exp8 and DOG.exp1 > DOG.exp9 and DOG.exp1 > DOG.exp10 and DOG.exp1 > DOG.exp11 and DOG.exp1 > DOG.exp12) then DOG.exp1
                           when (DOG.exp2  > DOG.exp1 and DOG.exp2 > DOG.exp3 and DOG.exp2 > DOG.exp4 and DOG.exp2 > DOG.exp5 and DOG.exp2 > DOG.exp6 and DOG.exp2 > DOG.exp7 and DOG.exp2 > DOG.exp8 and DOG.exp2 > DOG.exp9 and DOG.exp2 > DOG.exp10 and DOG.exp2 > DOG.exp11 and DOG.exp2 > DOG.exp12) then DOG.exp2
                           when (DOG.exp3  > DOG.exp1 and DOG.exp3 > DOG.exp2 and DOG.exp3 > DOG.exp4 and DOG.exp3 > DOG.exp5 and DOG.exp3 > DOG.exp6 and DOG.exp3 > DOG.exp7 and DOG.exp3 > DOG.exp8 and DOG.exp3 > DOG.exp9 and DOG.exp3 > DOG.exp10 and DOG.exp3 > DOG.exp11 and DOG.exp3 > DOG.exp12) then DOG.exp3
                           when (DOG.exp4  > DOG.exp1 and DOG.exp4 > DOG.exp2 and DOG.exp4 > DOG.exp3 and DOG.exp4 > DOG.exp5 and DOG.exp4 > DOG.exp6 and DOG.exp4 > DOG.exp7 and DOG.exp4 > DOG.exp8 and DOG.exp4 > DOG.exp9 and DOG.exp4 > DOG.exp10 and DOG.exp4 > DOG.exp11 and DOG.exp4 > DOG.exp12) then DOG.exp4
                           when (DOG.exp5  > DOG.exp1 and DOG.exp5 > DOG.exp2 and DOG.exp5 > DOG.exp3 and DOG.exp5 > DOG.exp4 and DOG.exp5 > DOG.exp6 and DOG.exp5 > DOG.exp7 and DOG.exp5 > DOG.exp8 and DOG.exp5 > DOG.exp9 and DOG.exp5 > DOG.exp10 and DOG.exp5 > DOG.exp11 and DOG.exp5 > DOG.exp12) then DOG.exp5
                           when (DOG.exp6  > DOG.exp1 and DOG.exp6 > DOG.exp2 and DOG.exp6 > DOG.exp3 and DOG.exp6 > DOG.exp4 and DOG.exp6 > DOG.exp5 and DOG.exp6 > DOG.exp7 and DOG.exp6 > DOG.exp8 and DOG.exp6 > DOG.exp9 and DOG.exp6 > DOG.exp10 and DOG.exp6 > DOG.exp11 and DOG.exp6 > DOG.exp12) then DOG.exp6
                           when (DOG.exp7  > DOG.exp1 and DOG.exp7 > DOG.exp2 and DOG.exp7 > DOG.exp3 and DOG.exp7 > DOG.exp4 and DOG.exp7 > DOG.exp5 and DOG.exp7 > DOG.exp6 and DOG.exp7 > DOG.exp8 and DOG.exp7 > DOG.exp9 and DOG.exp7 > DOG.exp10 and DOG.exp7 > DOG.exp11 and DOG.exp7 > DOG.exp12) then DOG.exp7
                           when (DOG.exp8  > DOG.exp1 and DOG.exp8 > DOG.exp2 and DOG.exp8 > DOG.exp3 and DOG.exp8 > DOG.exp4 and DOG.exp8 > DOG.exp5 and DOG.exp8 > DOG.exp6 and DOG.exp8 > DOG.exp7 and DOG.exp8 > DOG.exp9 and DOG.exp8 > DOG.exp10 and DOG.exp8 > DOG.exp11 and DOG.exp8 > DOG.exp12) then DOG.exp8
                           when (DOG.exp9  > DOG.exp1 and DOG.exp9 > DOG.exp2 and DOG.exp9 > DOG.exp3 and DOG.exp9 > DOG.exp4 and DOG.exp9 > DOG.exp5 and DOG.exp9 > DOG.exp6 and DOG.exp9 > DOG.exp7 and DOG.exp9 > DOG.exp8 and DOG.exp9 > DOG.exp10 and DOG.exp9 > DOG.exp11 and DOG.exp9 > DOG.exp12) then DOG.exp9
                           when (DOG.exp10 > DOG.exp1 and DOG.exp10 > DOG.exp2 and DOG.exp10 > DOG.exp3 and DOG.exp10 > DOG.exp4 and DOG.exp10 > DOG.exp5 and DOG.exp10 > DOG.exp6 and DOG.exp10 > DOG.exp7 and DOG.exp10 > DOG.exp8 and DOG.exp10 > DOG.exp9 and DOG.exp10 > DOG.exp11 and DOG.exp10 > DOG.exp12) then DOG.exp10
                           when (DOG.exp11 > DOG.exp1 and DOG.exp11 > DOG.exp2 and DOG.exp11 > DOG.exp3 and DOG.exp11 > DOG.exp4 and DOG.exp11 > DOG.exp5 and DOG.exp11 > DOG.exp6 and DOG.exp11 > DOG.exp7 and DOG.exp11 > DOG.exp8 and DOG.exp11 > DOG.exp9 and DOG.exp11 > DOG.exp10 and DOG.exp11 > DOG.exp12) then DOG.exp11
                           when (DOG.exp12 > DOG.exp1 and DOG.exp12 > DOG.exp2 and DOG.exp12 > DOG.exp3 and DOG.exp12 > DOG.exp4 and DOG.exp12 > DOG.exp5 and DOG.exp12 > DOG.exp6 and DOG.exp12 > DOG.exp7 and DOG.exp12 > DOG.exp8 and DOG.exp12 > DOG.exp9 and DOG.exp12 > DOG.exp10 and DOG.exp12 > DOG.exp11) then DOG.exp12
                       END)

сделал так....волнует оптимальный ли вариант получается?


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Zioma
Дата 16.2.2009, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



А как насчет функции?

Это сообщение отредактировал(а) Zioma - 16.2.2009, 10:34
PM MAIL   Вверх
Akina
Дата 16.2.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



то есть имеется 12 полей, требуется вытянуть то значение, которое превышает все остальные?
Тогда почему 12 уровней вложения???
Код

case when (case when (case when (case when exp1>exp2 then exp1 else exp2 end) > (case when exp3>exp4 then exp3 else exp4 end) then (case when exp1>exp2 then exp1 else exp2 end) else (case when exp3>exp4 then exp3 else exp4 end) end) > (case when (case when exp5>exp6 then exp5 else exp6 end) > (case when exp7>exp8 then exp7 else exp8 end) then (case when exp5>exp6 then exp5 else exp6 end) else (case when exp7>exp8 then exp7 else exp8 end) end) then (case when (case when exp1>exp2 then exp1 else exp2 end) > (case when exp3>exp4 then exp3 else exp4 end) then (case when exp1>exp2 then exp1 else exp2 end) else (case when exp3>exp4 then exp3 else exp4 end) end) else (case when (case when exp5>exp6 then exp5 else exp6 end) > (case when exp7>exp8 then exp7 else exp8 end) then (case when exp5>exp6 then exp5 else exp6 end) else (case when exp7>exp8 then exp7 else exp8 end) end) end) > (case when (case when exp9>exp10 then exp9 else exp10 end) > (case when exp11>exp12 then exp11 else exp12 end) then (case when exp9>exp10 then exp9 else exp10 end) else (case when exp11>exp12 then exp11 else exp12 end)) then (case when (case when (case when exp1>exp2 then exp1 else exp2 end) > (case when exp3>exp4 then exp3 else exp4 end) then (case when exp1>exp2 then exp1 else exp2 end) else (case when exp3>exp4 then exp3 else exp4 end) end) > (case when (case when exp5>exp6 then exp5 else exp6 end) > (case when exp7>exp8 then exp7 else exp8 end) then (case when exp5>exp6 then exp5 else exp6 end) else (case when exp7>exp8 then exp7 else exp8 end) end) then (case when (case when exp1>exp2 then exp1 else exp2 end) > (case when exp3>exp4 then exp3 else exp4 end) then (case when exp1>exp2 then exp1 else exp2 end) else (case when exp3>exp4 then exp3 else exp4 end) end) else (case when (case when exp5>exp6 then exp5 else exp6 end) > (case when exp7>exp8 then exp7 else exp8 end) then (case when exp5>exp6 then exp5 else exp6 end) else (case when exp7>exp8 then exp7 else exp8 end) end) end) else (case when (case when exp9>exp10 then exp9 else exp10 end) > (case when exp11>exp12 then exp11 else exp12 end) then (case when exp9>exp10 then exp9 else exp10 end) else (case when exp11>exp12 then exp11 else exp12 end))

всего 4 уровня...
Но вообще напиши хранимку, принимающую 12 значений и возвращающую максимальное из них, и не забивай себе голову такой ерундой.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
TaNK
Дата 16.2.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Спасибо за совету насчет функции или хранимки подумаю, которая будет принимать 12 значений...


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Akina
Дата 16.2.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



а чо там думать? нечто вроде
Код

create procedure max, @v1 float, @v2 float, ... @v12 float, @max output
as
@max=@v1
if @v2>@max then @max=@v2
if @v3>@max then @max=@v3
...
if @v12>@max then @max=@v12



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zioma
Дата 17.2.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



Можешь еще вставить все значения строки исходной таблицы во временную таблицу в одно поле и использовать стандартную функцию мах()
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0940 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.