2015-01-28 4 views
1

Ниже приводится таблица заказВыделение нескольких строк из столбца

order_table  
product_id amount price 
1   2  4 
1   5  4 
2   2  4 
2   3  4 
3   4  4 
4   3  4 
4   2  4 
4   2  4 
5   4  4 
5   1  4 
6   1  4 
6   1  4 

И ниже мои табличные значения

value_table 
product_id value 
1   a 
1   b 
1   c 
2   a 
2   b 
2   c 
3   a 
3   d 
3   c 
4   a 
4   d 
4   c 
5   a 
5   b 
5   c 
6   a 
6   d 
6   c 

То, что я хочу достичь, это в таблице ниже.

product_id amount*price as total values 
3   12     a,c and not equal to b 
4   28     a,c and not equal to b 
6   8      a,c and not equal to b 

Я понимаю, что как только вы группировать product_id, то он покажет вам только значение = «а» или «с». и это прекрасно, что я ищу, это продукты, которые содержат как a, c, так и не хотят, чтобы product_id имел значение, равное = b Итак, чтобы суммировать, только 3,4,6 должны отображаться сгруппированными, t суммируйте дубликаты того же порядка.

+0

product_id 3 должен иметь в общей сложности 16, не так ли? –

+0

Да, извините, я создал поддельный стол, поэтому я не отдал свою базу данных. ха-ха, но да, ты прав. –

ответ

1

Попробуйте это:

SELECT product_id,SUM(amount*price) as Totalprice 
FROM order_table 
WHERE product_id NOT IN 
     (SELECT product_id 
     FROM value_table 
     WHERE value='b') 
GROUP BY product_id 

Пояснение:

Внутренний запрос выбирает список product_ids, которые имеют в качестве значения б. Таким образом, внутренний запрос будет иметь результат (1,2,5).

Внешний запрос вычисляет сумму цен product_ids, которых нет в этом списке. то есть, не в списке (1,2,5)

Результат:

PRODUCT_ID TOTAL 
3   16 
4   28 
6   8 

видете в SQL Fiddle.

+0

Это будет работать с этим набором данных, но в массивной базе данных, в которой есть больше значений, которые я хочу позаботиться ... это не сработает. То, что я ищу, - это то, что будет фильтровать «a» и «c», после того как я хочу, чтобы это исключало любые b из таблицы a и c. Надеюсь, что это имеет смысл. –

+0

@PedroBernardo: Вы имеете в виду, что у вас больше значение, которое должно быть исключено, как «b», «e», «f» ...? –

Смежные вопросы