:: Игры Разума
Нужен SQL-запрос
flaxby
Автор

Сообщений: 112
Дата регистрации: 13.06.2002
Здравствуйте всем!
Есть таблица из 5 записей:
ValT N(8,3) TypeT I
----------- -------
100 1
2
3
1.2 4
2.7 5
Желательно в одном запросе сделать следующее:
1.Перемножить поля в колонке ValT (100*1.2*2.7) и результат поместить во вторую запись (TypeT=2), колонка ValT
2.Полученный в п.1. результат умножить на 10 и поместить в третью запись (TypeT=3), колонка ValT
Ratings: 0 negative/0 positive
Re: Нужен SQL-запрос
Mitchman

Сообщений: 9978
Откуда: Николаев
Дата регистрации: 24.05.2002
а где ваша попытка?
и почему именно одним запросом?
если это задачка на сообразительность - то не в тот форум ее запостили


------------------
-
«свидомые украинцы озабочены не столько созданием украинской культуры, сколько уничтожением русской»
-
Олесь Бузина




Исправлено 2 раз(а). Последнее : Mitchman, 06.09.09 14:49
Ratings: 0 negative/0 positive
Re: Нужен SQL-запрос
malnevit

Сообщений: 7
Дата регистрации: 06.09.2009
CREATE TABLE T FREE (ValT B, TypeT I)
INSERT INTO T values(100.0, 1)
INSERT INTO T values(2.0,0)
INSERT INTO T values(3.0,0)
INSERT INTO T values(1.2,4)
INSERT INTO T values(2.7,5)
Select ValT,;
ICASE(ValT=2,( SELECT 10^SUM(LOG10(Valt)) FROM T ),ValT=3,( SELECT 10*10^SUM(LOG10(Valt)) FROM T ),TypeT) TypeT;
from T

По хаду так.
Ratings: 0 negative/0 positive
Re: Нужен SQL-запрос
Prudivus

Сообщений: 4283
Откуда: Кишинев
Дата регистрации: 14.12.2006
Предлагаю денормализовать данные - развернуть это безобразие в одну строку.
Ratings: 0 negative/0 positive
Re: Нужен SQL-запрос
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Почти так - только напутал чуток с полями, и забыл что логарифм от 0 низя брать. Это, кстати, требует внесения уточнений в условияе задачи - если ValT = 0 в записях отличных от 2 и 3, то каков должен быть результат "перемножения" - 0 (по правилам - умножать на 0), или всё-же не 0 (выкинуть все нули перед перемножением).

CREATE CURSOR T1 (ValT B, TypeT I)
INSERT INTO T1 VALUES(100.0, 1)
INSERT INTO T1 VALUES(0, 2)
INSERT INTO T1 VALUES(0, 3)
INSERT INTO T1 VALUES(1.2, 4)
INSERT INTO T1 VALUES(2.7, 5)
SELECT ;
ICASE(TypeT = 2, ;
Product, ;
TypeT = 3, ;
10 * Product, ;
ValT) ValT, ;
TypeT ;
FROM T1, ;
(SELECT ;
IIF(SUM(IIF(ValT = 0, 1, 0)) = 0, ;
10^SUM(LOG10(IIF(ValT = 0, NULL, ValT))), ;
0) Product ;
FROM T1 ;
WHERE TypeT NOT IN (2, 3)) TProduct

P.S. Задача имеет чисто теоретический интерес - если автор собирается это использовать в реальной программе (подобные струткутры данных и подобные "вычисления одним запросом") - то мой ему совет - убей себя об стену пока с тобой это не сделал тот, к кому потом попадёт этот код


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Нужен SQL-запрос
flaxby
Автор

Сообщений: 112
Дата регистрации: 13.06.2002
To Igor Korolyov:
Спасибо! Ваш вариант работает отлично!
Цитата:
Задача имеет чисто теоретический интерес
Для меня задача имеет чисто практический интерес.То,что описано выше,ещё не вся задача.В реальности курсор выглядит так:
CREATE CURSOR T1 (ValT1 B,ValT2 B,ValT3 B,ValT4 B,ValT5 B,ValT6 B,TypeT I)
  • После выполненных выше вычислений для колонок ValT1,ValT2,ValT3,ValT4,ValT5 необходимо сложить найденные суммы по горизонтали (записи с типами TypeT=2 и TypeT=3) и полученные результаты поместить в ValT6.
  • Пользователь имеет перед собой весь открытый для редактирования курсор (не таблицу) и может ввести любое значение с моментальным вычислением результатов.
  • Такое построение интерфейса - требование жизни.
  • Суммы можно вычислять и в массиве,а что лучше - нужно сравнивать.
    Ratings: 0 negative/0 positive
  • Re: Нужен SQL-запрос
    ssa

    Сообщений: 12999
    Откуда: Москва
    Дата регистрации: 23.03.2005
    flaxby
  • Такое построение интерфейса - требование жизни.
  • Такое построение интерфейса относится к электронным таблицам. Может на них обратить внимание, а не устраивать очередное издевательство над системой, совершенно не приспособленной и для такого интерфейса, и для таких расчетов.

    ------------------
    Лень - это неосознанная мудрость.
    Ratings: 0 negative/0 positive


    Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

    On-line: 1 (Гостей: 1)

    © 2000-2024 Fox Club 
    Яндекс.Метрика