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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь по двум запросам 
:(
    Опции темы
batex
Дата 4.4.2012, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть такие таблицы 
1 - таблица заявок на товар FK_sales_goods(iid, name, priority)
2 - таблица товаров sales1(goods_id, goods_count, date)

Надо составить такие запросы: 
1 - вывод пяти самых популярных товаров. Тут я написал два запроса, первый суммирует заявки по одинаковому товару
select goods_id, SUM(goods_count) from sales1 group by sales1.goods_id
И второй выводит пять популярных Select top 5 FK_sales_goods.iid, FK_sales_goods.name, sales1.goods_count from sales1 
left join FK_sales_goods ON FK_sales_goods.iid = sales1.goods_id 
ORDER BY sales1.goods_count DESC
Как их объединить так, чтобы выводило пять популярных товаров по суммарному количеству заявок по товарам?


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


Новичок



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

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



Еще возник вопрос по поводу триггера. Пишу триггер, который запрещает добавлять товар с приоритетом меньше 1 и больше 9. Получилось вот что:

CREATE TRIGGER trig_1
ON FK_sales_goods
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
if (select FK_sales_goods.priority from FK_sales_goods) < 1
if (select FK_sales_goods.priority from FK_sales_goods) > 9
rollback
print'Error in priority'
END


При запросе 
INSERT FK_sales_goods VALUES('goods10',10)
ругается : Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Насколько я понимаю, условие возвращает несколько значений, как сделать так, чтобы условие if было только по введенному значение name?


PM MAIL   Вверх
Zloxa
Дата 5.4.2012, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(batex @  4.4.2012,  20:34 Найти цитируемый пост)
Пишу триггер, который запрещает добавлять товар с приоритетом меньше 1 и больше 9.

Здесь не нужен триггер. Здесь уместен check constraint
Код

alter table FK_sales_goods add constraint sal_goods_prioriry_chk check (priority between 1 and 9);

Цитата(batex @  4.4.2012,  20:34 Найти цитируемый пост)
 как сделать так, чтобы условие if было только по введенному значение name?

rtfm inserted,deleted
Цитата(batex @  4.4.2012,  19:07 Найти цитируемый пост)
Как их объединить так, чтобы выводило пять популярных товаров по суммарному количеству заявок по товарам?

Код

Select top 5 
       FK_sales_goods.iid
      ,max(FK_sales_goods.name) name
      ,sum(sales1.goods_count) goods_count
  from sales1
  left join FK_sales_goods
    ON FK_sales_goods.iid = sales1.goods_id
  group by FK_sales_goods.iid
  ORDER BY goods_count DESC



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
batex
Дата 5.4.2012, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Большое спасибо за помощь!
PM MAIL   Вверх
batex
Дата 6.4.2012, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Zloxa @ 5.4.2012,  08:42)
Цитата(batex @  4.4.2012,  20:34 Найти цитируемый пост)
Пишу триггер, который запрещает добавлять товар с приоритетом меньше 1 и больше 9.

Здесь не нужен триггер. Здесь уместен check constraint
Код

alter table FK_sales_goods add constraint sal_goods_prioriry_chk check (priority between 1 and 9);

Цитата(batex @  4.4.2012,  20:34 Найти цитируемый пост)
 как сделать так, чтобы условие if было только по введенному значение name?

rtfm inserted,deleted
Цитата(batex @  4.4.2012,  19:07 Найти цитируемый пост)
Как их объединить так, чтобы выводило пять популярных товаров по суммарному количеству заявок по товарам?

Код

Select top 5 
       FK_sales_goods.iid
      ,max(FK_sales_goods.name) name
      ,sum(sales1.goods_count) goods_count
  from sales1
  left join FK_sales_goods
    ON FK_sales_goods.iid = sales1.goods_id
  group by FK_sales_goods.iid
  ORDER BY goods_count DESC

Пытаюсь на основе этого запроса создать хранимую процедуру, где на входе параметры даты, а на выходе наименование товара. Если без выходного параметра все работает отлично, то с выходным ничего не получается.

Код

CREATE PROC proc_1
@date1 date,
@date2 date,
@outdata char(10) OUTPUT
AS
Select top 1 
        @outdata = FK_sales_goods.name,
       max(FK_sales_goods.name) name ,
       sum(sales1.goods_count) goods_count
     from sales1 
left join FK_sales_goods 
ON FK_sales_goods.iid = sales1.goods_id  
where 
(sales1.date >= @date1 and sales1.date <= @date2 )
group by FK_sales_goods.name
ORDER BY goods_count 
DESC


Выдает ошибку "A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations."
Не понимаю как заставить работать

Это сообщение отредактировал(а) batex - 6.4.2012, 14:28
PM MAIL   Вверх
batex
Дата 6.4.2012, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А, все, уже не надо, сам разобрался
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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