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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2009, 14:58   #1
yoolla
 
Регистрация: 28.07.2009
Сообщений: 5
По умолчанию Нужна помощь с SQL запросом!

Всем привет! Помогите пожалуйста!

Есть две базы:

Первая!

id barcode
1 пиво
2 водка

Вторая!

id цена товар магазин
1 10 пиво пятерочка
2 11 пиво окей
3 9 водка пятерочка
4 11 водка окей
5 7 вино пятерочка
6 13 пиво ашан


нужно посчитать сумму пива и водки в магазинах, где пива и водка имеются в ассортименте вместе...

т.е результат в данном случае должен быть:

вместе пиво и водка есть в пятерочке и окей

т.е результат: пятерочка 10+9, окей 11+11

Спасибо заранее
yoolla вне форума Ответить с цитированием
Старый 28.07.2009, 17:32   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

кагтотаг

Код:
with t1
as
(select 1 id, 'пиво' barcode from dual union all
 select 2, 'водка' from dual union all
 select 3, 'вино' from dual),
t2
as
(select 1 id, 10 price, 1 goods_id, 'пятерочка' shop_code from dual union all
 select 2, 11, 1, 'окей' shop_code from dual union all
 select 3, 9, 2, 'пятерочка' shop_code from dual union all
 select 4, 11, 2, 'окей' shop_code from dual union all
 select 5, 7, 3, 'пятерочка' shop_code from dual union all
 select 6, 13, 3, 'ашан' shop_code from dual)

select 
  a.shop_code,
  a.price_beer || '+' || a.price_vodka price
from(
select  
  t2.shop_code,
  max((select t3.price from t2 t3, t1 t4  where t3.shop_code = t2.shop_code and t3.goods_id = t4.id and t4.barcode = 'пиво')) price_beer,
  max((select t3.price from t2 t3, t1 t4 where t3.shop_code = t2.shop_code and t3.goods_id = t4.id and t4.barcode = 'водка')) price_vodka
from 
  t1,
  t2
where 0=0
  and t2.goods_id = t1.id
  and t1.barcode in ('пиво', 'водка')
group by t2.shop_code) a
where 0=0
  and a.price_beer is not null
  and a.price_vodka is not null
естественно, первая часть где WITH вам ни к чему - исходные данные в таблицах ведь у вас есть

Последний раз редактировалось soleil@mmc; 28.07.2009 в 17:35.
soleil@mmc вне форума Ответить с цитированием
Старый 29.07.2009, 12:52   #3
yoolla
 
Регистрация: 28.07.2009
Сообщений: 5
По умолчанию

Ух! Спасибо! Я так и догадывался, что одним SQL запросом тут не обойдешься!

Ща буду пробовать! Спасибо еще раз!
yoolla вне форума Ответить с цитированием
Старый 29.07.2009, 15:13   #4
yoolla
 
Регистрация: 28.07.2009
Сообщений: 5
По умолчанию

Я так понял, что t1 - это моя первая таблица, t2 - соответственно вторая!

А что такое t3 и t4! А также, объясните, пожалуйста, что такое price_beer и price_vodka! Я ведь оперирую только одним полем price!
yoolla вне форума Ответить с цитированием
Старый 29.07.2009, 15:33   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от yoolla Посмотреть сообщение
А что такое t3 и t4!
там по тексту запроса видно, что t3 и t4 это псевдонимы таблиц t2 и t1 соответственно

Цитата:
Сообщение от yoolla Посмотреть сообщение
А также, объясните, пожалуйста, что такое price_beer и price_vodka! Я ведь оперирую только одним полем price!
если вы знаете другой способ запихать цену из нескольких строк в одну, то предлагайте свой вариант
а price_beer и price_vodka считайте всего лишь временными переменными - на морде-то все равно будет ваш супер-пупер прайс (только "кому он нужен в таком виде?" я же не спрашиваю )
soleil@mmc вне форума Ответить с цитированием
Старый 30.07.2009, 12:05   #6
yoolla
 
Регистрация: 28.07.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
на морде-то все равно будет ваш супер-пупер прайс (только "кому он нужен в таком виде?" я же не спрашиваю )
Не много не понял! А что с прайсом не так? Он не правильно организован?

Есть база товаров, есть база магазинов, есть база цен на товары в магазинах! Кажется, тут велосипед не изобретешь, все просто!
yoolla вне форума Ответить с цитированием
Старый 30.07.2009, 13:11   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

о, так это, похоже, не учебная задача?..

yoolla
Вам пытаются сказать, что проблема получить
XXX + YYY
(Цена_на_один_Продукт " + " Цена_на_другой_Продукт)
ВСЁ ЭТО ИМЕННО С ПЛЮСИКОМ И В ОДНУ СТРОЧКУ!

вопрос - ЗАЧЕМ?!

и вообще, если нужно будет не водка, а, скажем, коньяк? тогда что - всё переписывать?
Да и в прайсах как-то принято писать один товар - одна строка...
т.е. если в результате нужно получить такой результат:
Код:
пятерочка водка 10
пятерочка пиво 9, 
окей водка 11
окей пиво 11
то запрос можно успростить...

расскажите, лучше, ИСХОДНУЮ задачу - что Вы хотите решить... может всё совсем не так надо делать...
и ещё, какая у Вас СУБД используется?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.07.2009, 14:59   #8
yoolla
 
Регистрация: 28.07.2009
Сообщений: 5
По умолчанию

Извините за неточность задачи!

Мне не надо чтобы было именно "С ПЛЮСИКОМ И В ОДНУ СТРОЧКУ!"

Мне просто нужна сумма, а в условии я так показал для наглядности...

задача такая: есть база цен на товары в разных магазинах, я выбираю товары, а система мне выдает в каких магазинах и сколько стоит выбранный список товаров! и все! но может так быть, что выбранный товар можно купить не в каждом магазине, а для этого и нужен этот запрос - посчитать сумму выбранных товаров только в тех магазинах, где они есть в наличии вместе!
yoolla вне форума Ответить с цитированием
Старый 30.07.2009, 16:07   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от yoolla Посмотреть сообщение
посчитать сумму выбранных товаров только в тех магазинах, где они есть в наличии вместе!
сумму цен товаров?

Цитата:
id barcode
1 пиво
2 водка

Вторая!

id цена товар магазин
1 10 пиво пятерочка
2 11 пиво окей
3 9 водка пятерочка
4 11 водка окей
5 7 вино пятерочка
6 13 пиво ашан
и да - при такой организации таблиц надо как минимум заменить поле "товар" в "таблице 2" на поле "Goods_id", которое будет сссылаться на "таблицу 1" на поле "id"
и тогда сам запрос будет попроще для любой вашей реализации

З.Ы.: а как максимум еще и завести отдельную табличку под магазины и тогда "таблица 2" будет состоять почти из одних айдишников
З.Ы.2: так что даже изобретение велосипедов имеет свои законы

Последний раз редактировалось soleil@mmc; 30.07.2009 в 16:15.
soleil@mmc вне форума Ответить с цитированием
Старый 31.07.2009, 23:54   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

select пиво.цена + водка.цена, пиво.магазин
from прайс пиво
inner join прайс водка on пиво.магазин=водка.магазин and товар='водка'
where товар ='пиво'
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с запросом! rocker PHP 1 22.03.2009 13:15
Нужна помощь с SQL MaskEdit БД в Delphi 8 13.01.2009 17:00
Ошибка c SQL-запросом Сергей089 БД в Delphi 13 08.12.2008 18:02
Нужна помощь по нескольким sql запросам Named SQL, базы данных 3 23.09.2008 13:56
Нужна помощь с SQL запросом Worms БД в Delphi 3 14.03.2008 12:43