2013-11-22 2 views
0

У меня есть таблица, в которой перечислены тысячи продуктов. Продукт может быть стандартным (123450.000.000), одним цветом (123456.BLA.000), одним размером (123456.000.LAR) или обоими цветами и размером (123456.BLA.LAR).Товары с только одним имеющимся цветом на складе - SQL-запрос

Продукт может иметь несколько цветов (123456.BLA.000, 123456.YEL.OOO и т. Д. И т. Д.). Я пытаюсь сделать запрос, который возвращает продукт с несколькими цветами, но только один цвет на складе, то есть ProductQTY = 1, а оставшиеся цвета отсутствуют.

Все, что мне удалось найти, это запрос ниже, но это просто возвращает все «варианты», которые имеют 1 на складе. Что я должен добавить или изменить, чтобы вернуть результат, когда продукт имеет разные цвета, но только один из этих цветов находится в запасе, а оставшиеся нет в наличии? Нужно ли делать СОЮЗ?

select * 
from Product 
where productcode NOT LIKE ('%000.000') 
AND ProductQTY = '1' 
+0

Показать структуры таблиц, данные образцов и используемые вами dbms. –

+0

Какие СУБД вы используете? – Radix

+0

SQL Server Management Studio – user1278496

ответ

1

Во-первых, это ужасная структура. Храните информацию о цветах и ​​размерах в отдельных таблицах, не делайте их частью одной массивной переменной.

Во-вторых, вы хотите сделать запрос, который выбирает идентификаторы продукта (1-6, выглядит так), которые имеют счетчик> 1 с цветом, и сумма их величин равна 1 точно (согласно вашему вопросу - если это одна запись может иметь qty> 1 и все равно быть в порядке, это немного сложнее).

select * from product where substr(product,1,6) in (
select substr(product,1,6) from product 
where not (product like '%.000.%') 
group by 1 
having count(1) > 1 
and sum(ProductQTY)=1 
) 
0

Вопрос будет намного проще, если вы разделите свойства в разных столбцах. Но вы можете сделать это и в запросе:

select code from 
    (select substring(productcode,-3) as size, 
    substring(productcode,-7,3) as colour, 
    substring(productcode,0,len(prodcutcode)-7) as code 
    from product) t 
group by code 
having sum(productQTY) = 1 

//or count(*) = 1 to get all unique ones 
+0

Как это получить записи с несколькими записями цветов и один на складе? – Joe

+0

выберите * from product где substring (productcode, 0, len (prodcutcode) -7) in (мой запрос) – Alfons

+0

Это цвет, но он не получает записей, где есть два или более цветов для одного и того же кода продукта. – Joe

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