只有一种颜色库存的产品 - SQL查询

时间:2013-11-22 15:40:46

标签: sql sql-server union

我有一张列出数千种产品的表格。产品可以是标准(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'

2 个答案:

答案 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