Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вычисление данных в запросе.  [new]
le7o
Member

Откуда:
Сообщений: 70
Есть запрос на выборку значений из таблицы t1:

SELECT f1,
	 SUM(f2) AS f2, SUM(f3) AS f3, SUM(f4) AS f4, SUM(f5) AS f5 
FROM 
	tab_name t1
WHERE 
	t1.f6=1 AND t1.f7='Строковый параметр'
	AND t1.f8_id=7  
GROUP BY np;

Получается результат что то вроде:
___________________________________________________________________________________
|f1 | f2 | f3 | f4 | f5 |
__________________________________________________________________________________ |
|03 | 233.60000000000002 | 233.60000000000002 | 13470.160669999999 | 13470.160669999999 | - res1
|09 | 22.699999999999999 | 22.699999999999999 | 1235.4160200000001 | 1235.4160200000001 | - res2
|15 | 77.200000000000003 | 77.200000000000003 | 4842.1098100000008 | 4842.1098100000008 | - res3
___________________________________________________________________________________

Нужно из f1(res2) - f1(res1)(09-03) и из поля f1(res3)-f1(res2) (15-09), и сравнить результат разницы если равно 3 значить в отдельное поле отобразить 1 (первый результат выборки всегда равен res1 = 1) если больше 2 и так далее по нарастающей, и в финале сгруппировать суммы по 1, 2, 3 и т.п.

есть идеи?
25 ноя 11, 07:55    [11656062]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление данных в запросе.  [new]
AHDP
Member

Откуда:
Сообщений: 1226
"f1(res2) - f1(res1)(09-03) и из поля f1(res3)-f1(res2) (15-09)" - Расшифруйте.
"отдельное поле отобразить 1 (первый результат выборки всегда равен res1 = 1) если больше 2 и так далее по нарастающей, и в финале сгруппировать суммы по 1, 2, 3 и т.п." - Не понятно что хотите и как это должно выглядеть
25 ноя 11, 09:24    [11656229]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление данных в запросе.  [new]
le7o
Member

Откуда:
Сообщений: 70
AHDP
"f1(res2) - f1(res1)(09-03) и из поля f1(res3)-f1(res2) (15-09)" - Расшифруйте.
"отдельное поле отобразить 1 (первый результат выборки всегда равен res1 = 1) если больше 2 и так далее по нарастающей, и в финале сгруппировать суммы по 1, 2, 3 и т.п." - Не понятно что хотите и как это должно выглядеть


|f1 | f2 | f3 | f4 | f5 | RESULT int|
__________________________________________________________________________________ | |
|3 | 233.60000000000002 | 233.60000000000002 | 13470.160669999999 | 13470.160669999999 | 1 | - res1
|9 | 22.699999999999999 | 22.699999999999999 | 1235.4160200000001 | 1235.4160200000001 | 2 | - res2
|15 | 77.200000000000003 | 77.200000000000003 | 4842.1098100000008 | 4842.1098100000008| 2 | - res3

Поле Result у первой строчки выборки всегда должно быть равно 1.
1 если разница между значениями первой и второй строчки выборки равна 0 либо 3, если больше то 2, затем вычисляется разница между значениями третьей строчки и второй и если разница либо равна 0 либо 3 тогда 1 если нет тогда 2... .
25 ноя 11, 10:36    [11656645]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление данных в запросе.  [new]
AHDP
Member

Откуда:
Сообщений: 1226
Сохранить результат во временную таблицу.
Временную таблицу дважды поджйнить саму на себя с условием однозначного смещения на +- одну запись, получить результат, не забыв обработать Null для первой и последней записей.
25 ноя 11, 11:02    [11656824]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление данных в запросе.  [new]
AHDP
Member

Откуда:
Сообщений: 1226
Упс, не так понял. Достаточно поджойнить саму на себя со смещением в 1 запись. Если нельзя однозначно сформулировать условие на F1, то нужно идти через соединение с подзапросом и top 1.
25 ноя 11, 11:05    [11656843]     Ответить | Цитировать Сообщить модератору
 Re: Вычисление данных в запросе.  [new]
le7o
Member

Откуда:
Сообщений: 70
AHDP
Упс, не так понял. Достаточно поджойнить саму на себя со смещением в 1 запись. Если нельзя однозначно сформулировать условие на F1, то нужно идти через соединение с подзапросом и top 1.


А можете привести пример реализации...
25 ноя 11, 13:15    [11658283]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить