![]() |
![]() |
#1 |
Заслуженный Участник
|
![]()
Что-то душновато в офисе - начал тупить...
Короче есть табличка типа: 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
__________________
_______________________ Синсерелли Ваш. Артемий ![]() |
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#2 |
Заслуженный Участник
|
![]()
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 |
![]() |
![]() |
![]() |
#3 | |
Заслуженный Участник
|
![]()
variant N2
Цитата:
__________________
Перед тем как на кого то насрать, убедись что ты снял штаны |
|
![]() |
![]() |
![]() |
#4 | |
Заслуженный Участник
|
![]()
Угу, вот что-то такое я и представлял себе примерно, только мозг категорически отказывался работать.
Arte добавил 06.05.2011 в 17:10 Ну вроде ничего так... тоже. Надо буде только прикинуть кой чего по условиям. У меня там в реалии типов продуктов что-то около 6 и условия навроде (p1 || p2) and (p3 || p4). Цитата:
__________________
_______________________ Синсерелли Ваш. Артемий ![]() Последний раз редактировалось Arte, 06.05.2011 в 16:10. Причина: Добавлено сообщение |
|
![]() |
![]() |
![]() |
#5 |
Заслуженный Участник
|
![]()
В принципе 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 |
![]() |
![]() |
![]() |
#6 |
Заслуженный Участник
|
![]()
надо знать еще несколько вещей:
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 терзают мну смутные сомнения что "толстый" in будет работать быстрее ![]()
__________________
Для мод-ов: "звезду" лепить сюда [ ] ![]() Amicus Plato, sed magis amica veritas Последний раз редактировалось Deesy, 06.05.2011 в 16:51. Причина: Добавлено сообщение |
![]() |
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщ. |
вопрос | 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 |