VirtualIreland.ru - Виртуальная Ирландия
Вернуться   VirtualIreland.ru - Виртуальная Ирландия > Живем в Ирландии > IT и Связь

IT и Связь Обсуждение "айтишных" вопросов и средств связи

Ответ
 
Опции темы Опции просмотра
Старый 06.05.2011, 15:17   #1
Заслуженный Участник
 
Аватар для Arte
 
Откуда: Planet Earth
Сообщений: 3,287
Благодарности: 1,368 в 554 сообщениях Поиск благодарностей Arte
Отправить сообщение для  Arte с помощью ICQ
По умолчанию Вопрос по SQL

Что-то душновато в офисе - начал тупить...
Короче есть табличка типа:

ID | order_number | product_type
1 o1 p1
2 o1 p2
3 o2 p3
4 o3 p1
5 o4 p1
6 o4 p2
7 o5 p1
8 o6 p2

Нужно выдать те строки где в одном и том же ордере имеются типы продуктов p1 & p2
В данном случае o1 & o4
__________________
_______________________
Синсерелли Ваш. Артемий
Arte вне форума   Ответить с цитированием

Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок
Старый 06.05.2011, 15:44   #2
Заслуженный Участник
 
Сообщений: 909
Благодарности: 614 в 352 сообщениях Поиск благодарностей deniszb
По умолчанию Re: Вопрос по SQL

Arte
Можно так:

/*
CREATE table Test (ID int primary key identity, order_number varchar(255), product_type varchar(255))
insert into Test (order_number, product_type)

select 'o1' as a, 'p1' as b
union all
select 'o1', 'p2'
union all
select 'o2', 'p3'
union all
select 'o3', 'p1'
union all
select 'o4', 'p1'
union all
select 'o4', 'p2'
union all
select 'o5', 'p1'
union all
select 'o6', 'p2'
*/

select order_number FROM Test
where product_type in ('p1', 'p2')
group by order_number
having COUNT(distinct product_type) = 2
deniszb вне форума   Ответить с цитированием
Старый 06.05.2011, 16:01   #3
Заслуженный Участник
 
Аватар для Zindur
 
Откуда: из роддома
Сообщений: 1,929
Благодарности: 1,861 в 509 сообщениях Поиск благодарностей Zindur
По умолчанию Re: Вопрос по SQL

variant N2
Цитата:
SELECT p1.*
FROM TBL_ARTE p1
INNER JOIN (
select *
from TBL_ARTE
where product_type = 'p2') p2 ON p2.order_number = p1.order_number
WHERE p1.product_type = 'p1'
__________________
Перед тем как на кого то насрать, убедись что ты снял штаны
Zindur вне форума   Ответить с цитированием
Старый 06.05.2011, 16:08   #4
Заслуженный Участник
 
Аватар для Arte
 
Откуда: Planet Earth
Сообщений: 3,287
Благодарности: 1,368 в 554 сообщениях Поиск благодарностей Arte
Отправить сообщение для  Arte с помощью ICQ
По умолчанию Re: Вопрос по SQL

Цитата:
Сообщение от Zindur Посмотреть сообщение
variant N2
Угу, вот что-то такое я и представлял себе примерно, только мозг категорически отказывался работать.

Arte добавил 06.05.2011 в 17:10
Ну вроде ничего так... тоже.
Надо буде только прикинуть кой чего по условиям. У меня там в реалии типов продуктов что-то около 6 и условия навроде (p1 || p2) and (p3 || p4).


Цитата:
Сообщение от deniszb Посмотреть сообщение
Arte
Можно так:

/*
CREATE table Test (ID int primary key identity, order_number varchar(255), product_type varchar(255))
insert into Test (order_number, product_type)

select 'o1' as a, 'p1' as b
union all
select 'o1', 'p2'
union all
select 'o2', 'p3'
union all
select 'o3', 'p1'
union all
select 'o4', 'p1'
union all
select 'o4', 'p2'
union all
select 'o5', 'p1'
union all
select 'o6', 'p2'
*/

select order_number FROM Test
where product_type in ('p1', 'p2')
group by order_number
having COUNT(distinct product_type) = 2
Короче спасибо всем!
__________________
_______________________
Синсерелли Ваш. Артемий

Последний раз редактировалось Arte, 06.05.2011 в 16:10. Причина: Добавлено сообщение
Arte вне форума   Ответить с цитированием
Старый 06.05.2011, 16:32   #5
Заслуженный Участник
 
Сообщений: 909
Благодарности: 614 в 352 сообщениях Поиск благодарностей deniszb
По умолчанию Re: Вопрос по SQL

В принципе WHERE тут только для того чтобы побыстрее работало

--(p1 || p2) and (p3 || p4).
select order_number FROM Test
where product_type in ('p1', 'p2', 'p3', 'p4', '.........')
group by order_number
having COUNT(distinct case

when product_type in ('p1', 'p3') then '(p1 || p2)'
when product_type in ('p2', 'p4') then '(p3 || p4)'
END
) = 2
deniszb вне форума   Ответить с цитированием
Старый 06.05.2011, 16:47   #6
Заслуженный Участник
 
Аватар для Deesy
 
Откуда: Барнаул туда блин 15
Сообщений: 2,769
Благодарности: 927 в 431 сообщениях Поиск благодарностей Deesy
По умолчанию Re: Вопрос по SQL

надо знать еще несколько вещей:
1. если в заказах больше чем 2 указаных продукта, нужно ли все равно их показывать?
2. если в заказе один из продуктов указан дважды?
а так на вскидку на будущее с поправкой на различное кол-во запрашеваемых продуктов:


select order_number
from mytable
where product_type in ('p1','p2','p3')
group by order_number
having count(*) = 3 -- for 3 products on top


updated: ууупс вроде как решили ужо

Deesy добавил 06.05.2011 в 17:51
Цитата:
Сообщение от deniszb Посмотреть сообщение
В принципе WHERE тут только для того чтобы побыстрее работало
терзают мну смутные сомнения что "толстый" in будет работать быстрее
__________________
Для мод-ов: "звезду" лепить сюда [ ]
Amicus Plato, sed magis amica veritas

Последний раз редактировалось Deesy, 06.05.2011 в 16:51. Причина: Добавлено сообщение
Deesy вне форума   Ответить с цитированием
Ответ



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать на сообщения
Вы не можете добавлять вложения
Вы не можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщ.
вопрос alincik Медицина 4 03.01.2010 12:24
Вопрос Вася Бельведерский 60+ 66 01.06.2009 22:43
Вопрос о гранте по смерти ( было: вопрос) nadezda_k Общие темы 4 05.03.2009 19:41
извечный вопрос :)- ехать или нет(и доп вопрос) DimaOthr Иммиграция 21 03.12.2007 22:30
вопрос по CVS TYA IT и Связь 12 24.03.2006 15:44


Часовой пояс GMT, времени сейчас: 09:36.


vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd., Русификация: zCarot, Vovan & Co
©2003-2025 VirtualIreland.ru - Виртуальная Ирландия