Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 09:26   #1
Lader
 
Регистрация: 12.07.2010
Сообщений: 7
По умолчанию Создание функции Агрегации в MS-SQL

Доброго времени суток.

Суть проблемы в следующем:

Необходимо написать функцию суммирования строк, на подобие стандартной sum, но с двумя параметрами, один из параметров - уникальный идентификатор строки, а второй числовое значение, при этом он должен суммировать только те числовые значения, где идентификатор не дублируется.

Кто сталкивался с подобное проблемой, подскажите решение.
Lader вне форума Ответить с цитированием
Старый 06.06.2011, 10:07   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Исходная посылка совершенно не ясна. Приведите пример из нескольких строк таблицы и что из них хочется получить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.06.2011, 10:25   #3
Lader
 
Регистрация: 12.07.2010
Сообщений: 7
По умолчанию

Есть две таблицы U1 и U2 одна запись U1 соответствует многим записямU2
U1 состоит из полей идентификатор, сумма
U2 состоит из полей идентификатор, сумма, дата и ссылка на таблицу U1.
Запрос выглядит примерно так:

select sum(U1.sum)
from
U1
join
U2
on U2.id_U1=U1.id
group by U2.date

Проблема в следующем: надо суммировать так, чтобы в группировке не дублировались ссылки таблицы U2 на таблицу U1.
Lader вне форума Ответить с цитированием
Старый 06.06.2011, 11:53   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Все равно не ясно. Что нужно получить для следующей ситуации
Код:
U1
id       sum
1        10.00
2         7.00

U2
id   id_U1  date
1    1      15-05-2011
2    1      15-05-2011
3    1      16-05-2011
4    2      16-05-2011
5    2      17-05-2011
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.06.2011, 13:06   #5
Lader
 
Регистрация: 12.07.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
U1
id       sum
1        10.00
2         7.00

U2
id   id_U1  date
1    1      15-05-2011
2    1      15-05-2011
3    1      16-05-2011
4    2      16-05-2011
5    2      17-05-2011
результат должен быть такой:
Код:
date         sum
15-05-2011  10.00 - если одинаковые  id_U1, то выводиться только одно значение из таблицы U1, без суммирования
16-05-2011  17.00 - если id_U1 разные, то суммируются 
17-05-2011  7.00
Lader вне форума Ответить с цитированием
Старый 06.06.2011, 13:20   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
select u2x.date, sum(u1.sum)
from u1
join (select distinct u2.id_u1, date from u2) u2x on u2x.id_u1=u1.id
group by date
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.06.2011, 23:17   #7
Lader
 
Регистрация: 12.07.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
select u2x.date, sum(u1.sum)
from u1
join (select distinct u2.id_u1, date from u2) u2x on u2x.id_u1=u1.id
group by date
Забыл сказать, нельзя выкидывать u2.id т.к. запрос большой и этот id используется для связи с другой таблицей, в этом то и сложность.
Хорошо было бы иметь функцию наподобие SUM только с двумя параметрами, что бы передавать туда id и проверять его.

Но вот как написать такую?
Lader вне форума Ответить с цитированием
Старый 07.06.2011, 00:01   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
date         sum   u2.id
15-05-2011  10.00  1 или 2 - ?
16-05-2011  17.00  3 или 4 - ?
17-05-2011  7.00   5
Из примера - и какое же id вы получите в 3-ей колонке? В запросе максимальное или минимальное можно вычислить, но что это даст? Что касается функции наподобие SUM - dll сможете нарисовать? А если без наподобие SUM, то пользовательская функция ничем здесь не поможет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 07.06.2011 в 00:05.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание SQL Stranger333 SQL, базы данных 1 28.02.2010 18:50
Создание запроса SQL Irina_87 Помощь студентам 12 28.12.2009 06:14
SQL создание БД Best Programmist Microsoft Office Access 1 03.12.2009 17:14
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
Создание процедуры на SQL Skyline20000 SQL, базы данных 0 31.03.2009 16:57