![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
Колесо |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 18.12.2011 Репутация: нет Всего: нет |
Здравствуйте.
Есть БД в которой ведутся закупки со след. таблицами: Purchase_Order (PO_id, User_id, Order_placed_date, Vendor) Users (Id, name), Goods (Id,POID, Category_id, Price, Quantity), Category (Code, Description). В одном заказе может содержаться несколько позиций. Необходимо Получить данные по закупкам в сгруппированном виде: нужно видеть сумму покупок каждого менеджера по каждой категории по каждому поставщику за 2013 год. Получился вот такой запрос. Только не совсем понятно с группировками. Правильно ли сделано или нет. Может подскажете как улучшить его.
|
|||
|
||||
Колесо |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 18.12.2011 Репутация: нет Всего: нет |
Кусок результата:
Хотелось бы видеть по заказу агрегированную сумму. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
А теперь посмотрите на свой запрос. Что в GROUP BY делают поля, которые в списке требуемой группировки НЕ УКАЗАНЫ? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Magistrus |
|
|||
![]() Жив ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 14.6.2006 Где: г. Одесса Репутация: 1 Всего: 1 |
в MySQl можно вместо MAX использовать просто Users.Name и Category.Description Это сообщение отредактировал(а) Magistrus - 25.9.2013, 13:33 --------------------
~ вот такая вот загагулина ~ |
|||
|
||||
Колесо |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 18.12.2011 Репутация: нет Всего: нет |
Akina, все что указано в SELECT нужно видеть (кроме номера самого заказа PO_ID)
Добавлено @ 14:28 Magistrus, спасибо, попробую) а по PO.PO_id не нужно группировать? Это сообщение отредактировал(а) Колесо - 25.9.2013, 14:29 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Вот именно этот PO_ID нужно вообще из запроса выкинуть! Тебе не требуется группировка по отдельным заказам? вывод однозначен - нафиг её... А коли нафиг из группирования, то либо нафиг из вывода, либо, как сделал Magistrus (очень, кстати, логично, хоть ты эти данные и не просишь), в групповую операцию. А то ведь если в двух разных заказах от одного и того же поставщика у одного и того же менеждера будут товары одной и той же категории - именно группировка по заказу не даст им собраться воедино. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Колесо |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 18.12.2011 Репутация: нет Всего: нет |
Спасибо, понял.
|
|||
|
||||
Колесо |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 18.12.2011 Репутация: нет Всего: нет |
Еще не большой вопросик.
В таблице Purchase_Order есть поля currency, USD, EUR; в таблице Goods (Price, Quantity). Значениями поля currency м.б. : 1 (rub),2 (eur), 3(usd). Нужно получить результаты в рублях. Т.е. добавить условие, что если currency = 2 или 3 нужно дополнительно Price и Quantity умножить на соответствующий курс валюты. Можно ли это сделать прямо в select? СУБД MsSQL. Я так понимаю там нет оператора if? Это сообщение отредактировал(а) Колесо - 26.9.2013, 10:54 |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
там есть православный case, но он вам не нужен. что вам нужно, так это подтянуть справчоник курсов валют, который скорее всего имеет измерение даты, которое надо коррелировать с атрибутом даты заказа. Думаю, что вам, скорее всего будет проще всего реализовать это посредством скалярного кореллированного подзапроса. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Колесо |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 18.12.2011 Репутация: нет Всего: нет |
курсы валют хранится в таблице Purchase_Order в столбцах USD, EUR.
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Колесо |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 18.12.2011 Репутация: нет Всего: нет |
Спасибо!) Все работает
![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |