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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2013, 02:37   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а если так попробовать?

Код:
update @tbl
set 
 @tbl.sredcena=(select avg(t2.cena) from @tbl t2 group by t2.obj where t2.obj=@tbl.obj )
where @tbl.pr=-1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.06.2013, 11:37   #12
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Сообщение 156, уровень 15, состояние 1, строка 11
Неправильный синтаксис около ключевого слова "where".
вот в этой строке:
Код:
update @tbl set  sredcena =(select avg(t2.cena) from @tbl t2 group by t2.obj where t2.obj = obj)
where @tbl.pr=-1;
___________________________
если так :
Код:
 update @tbl set  sredcena = (select avg(t2.cena) from @tbl t2  where t2.obj = obj group by t2.obj)
where pr=-1;
то
Сообщение 512, уровень 16, состояние 1, строка 11
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Выполнение данной инструкции было прервано.
Есть задача - реши ее!

Последний раз редактировалось ТипичныйСтудент; 30.06.2013 в 11:40.
ТипичныйСтудент вне форума Ответить с цитированием
Старый 30.06.2013, 12:09   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
where t2.obj = obj
Полагаю тут нужен первый алиас
Код:
where t2.obj = t1.obj
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2013, 12:24   #14
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Полагаю тут нужен первый алиас
Код:
where t2.obj = t1.obj
откуда он возьмется если мы его не создавали..?
вот строка кода:
Код:
update @tbl set  sredcena = (select avg(t2.cena) from @tbl t2   where t2.obj = obj group by t2.obj)
where pr=-1;
так запрос как бы выполняется, но ничего не делает "завершен с ошибками", какой см выше
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 30.06.2013, 12:38   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
update @tbl 
  set  sredcena = (select avg(t2.cena) from @tbl t2  where t2.obj = t1.obj group by t2.obj)
  from @tbl t1
  where t1.pr=-1;
но это не средняя цена. нужно суммарную стоимость делить на суммарное количество
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.06.2013, 12:41   #16
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
update @tbl 
  set  sredcena = (select avg(t2.cena) from @tbl t2  where t2.obj = t1.obj group by t2.obj)
  from @tbl t1
  where t1.pr=-1;
но это не средняя цена. нужно суммарную стоимость делить на суммарное количество
ну да...а как?
блин, ну помогите пожалуйста=((
а так не пойдет?
Код:
update @tbl set  sredcena = (select sum(summa)/sum(kolvo) from @tbl t2  where t2.obj = t1.obj group by t2.obj)
from @tbl t1 where t1.pr=-1;
update @tbl set  sredcena = (select sum(summa)/sum(kolvo) from @tbl t2  where t2.obj = t1.obj group by t2.obj)
from @tbl t1 where t1.pr=1;
только еще момент, поставки которые будут более поздним числом, могут иметь свою среднюю цену, а те что более ранние цену (среднюю) уже менять не должны...
т.е. если 5го сред цена 30, то 15го она может быть 40, но за 5е запись не должна меняться...
получается надо еще как-то и дату прихода в расчет брать....
Есть задача - реши ее!

Последний раз редактировалось ТипичныйСтудент; 30.06.2013 в 12:47.
ТипичныйСтудент вне форума Ответить с цитированием
Старый 30.06.2013, 14:13   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
блин, ну помогите пожалуйста=((
Оладик!
Ты даже не желаешь слушать что тебе говорят. Остаток не должен быть статическим свойством, а должен вычислятся от периода. Его ненужно (я бы даже сказал опасно) хранить в базе.
Толку помогать, если я лично вижу твой путь тупиковым.
Цитата:
откуда он возьмется если мы его не создавали..?
Внимательно смотри что я написал:
Цитата:
update tbl t1
Я не пробовал конечно работает это или нет. Просто предположил.
Иначе пиши хранимую процедуру с FETCH проходом.

Ты даже не представляешь какую мороку себе сейчас навешиваешь на голову, пытаясь составить такие запросы, которые приведут к избыточности в базе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2013, 14:30   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ТипичныйСтудент Посмотреть сообщение
Сообщение 156, уровень 15, состояние 1, строка 11
Неправильный синтаксис около ключевого слова "where".
вот в этой строке:
Код:
update @tbl set  sredcena =(select avg(t2.cena) from @tbl t2 group by t2.obj where t2.obj = obj)
where @tbl.pr=-1;
посмотрите, пожалуйста, почему Вы не попробовали тот вариант, который я предложил?!

Код:
update @tbl
set 
 @tbl.sredcena=(select avg(t2.cena) from @tbl t2 group by t2.obj where t2.obj=@tbl.obj )
where @tbl.pr=-1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.06.2013, 14:34   #19
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Оладик!
Ты даже не желаешь слушать что тебе говорят. Остаток не должен быть статическим свойством, а должен вычислятся от периода. Его ненужно (я бы даже сказал опасно) хранить в базе.
Толку помогать, если я лично вижу твой путь тупиковым.

Внимательно смотри что я написал:

Я не пробовал конечно работает это или нет. Просто предположил.
Иначе пиши хранимую процедуру с FETCH проходом.

Ты даже не представляешь какую мороку себе сейчас навешиваешь на голову, пытаясь составить такие запросы, которые приведут к избыточности в базе.
1) с алиасами я разобралась, работают
2) остатки не трогаю, считаю только общую сумму и общее количество
3) средняя цена рассчитывается, но надо как-то это делать с учетом даты прихода, как не знаю
4) Я СЛУШАЮ! но мне дали такую задачу, чтоб в одном запросе рассчитать среднюю цену товара с учетом прихода и списания

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
посмотрите, пожалуйста, почему Вы не попробовали тот вариант, который я предложил?!

Код:
update @tbl
set 
 @tbl.sredcena=(select avg(t2.cena) from @tbl t2 group by t2.obj where t2.obj=@tbl.obj )
where @tbl.pr=-1
попробовала, но не получилось, получилось вот так:
Код:
update @tbl set  sredcena = (select avg(t2.cena) from @tbl t2  where t2.obj = t1.obj group by t2.obj)
from @tbl t1 where t1.pr=-1;
далее я заменила avg(t2.cena) на sum(t2.summa)/sum(t2.kolvo), все рассчитывает, но еще раз повторюсь, надо как-то это делать с учетом даты...
Есть задача - реши ее!

Последний раз редактировалось Stilet; 30.06.2013 в 18:58.
ТипичныйСтудент вне форума Ответить с цитированием
Старый 30.06.2013, 19:02   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
надо как-то это делать с учетом даты прихода
Добавляются условия:
Код:
update @tbl set  sredcena = (
  select avg(t2.cena) 
   from @tbl t2  where 
          t2.obj = t1.obj 
    and dt between ДатаНачала and ДатаКонца
  group by t2.obj
)
Цитата:
from @tbl t1 where t1.pr=-1;
Не понял... К чему этот from?
Цитата:
мне дали такую задачу, чтоб в одном запросе рассчитать среднюю цену товара с учетом прихода и списания
Но это не означает что нужно результаты этого запроса хранить в БД
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчет стоимости экскурсии danichca Microsoft Office Excel 5 15.02.2013 15:51
расчет стоимости или средневзвешенной цены в сводной таблице Максим1981 Microsoft Office Excel 2 08.02.2013 11:25
Расчет стоимости продукции. (Отправка по email) VovaNorris PHP 0 23.09.2012 15:11
Расчет стоимости nevka Microsoft Office Access 2 18.09.2012 02:09
расчет стоимости на радиокнопках Valuh JavaScript, Ajax 0 17.09.2011 00:05