我有一张列出数千种产品的表格。产品可以是标准(123450.000.000),一种颜色(123456.BLA.000),一种尺寸(123456.000.LAR)或颜色和尺寸(123456.BLA.LAR)。
产品可以有多种颜色(123456.BLA.000,123456.YEL.OOO等)。我试图做一个查询,带回一个产品有多种颜色但库存只有一种颜色,即ProductQTY = 1,其余颜色缺货。
我能够提出的是下面的查询,但这只会带回所有库存中有1种“变种”产品。我需要添加或更改什么才能使产品具有不同颜色的结果,但这些颜色中只有一种有库存而其余颜色缺货?我需要做一个UNION吗?
select *
from Product
where productcode NOT LIKE ('%000.000')
AND ProductQTY = '1'
答案 0 :(得分:1)
首先,这是一个糟糕的结构。将颜色和大小信息存储在单独的表中,不要将它们作为一个大型变量的一部分。
其次,您要执行选择具有计数>的产品ID(1-6,看起来像)的查询。 1,颜色存在,其数量之和为1(根据您的问题 - 如果一个记录的数量> 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
)
答案 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