我认为可能有办法对此进行分区以找到我想要的东西,但我看不到它。我有一些关于产品集的非标准化数据:
SetItemID ComponentItemID quantity IsPrimary
123 234 1 1
123 345 2 0
456 567 3 1
456 678 2 0
我需要找到quantity
所描述的集合,例如IsPrimary
组件的quantity
> “值isPrimary = 0 component's
量。我还需要找到组件之间数量相等的集合等。如果需要,可以使用多个语句
到目前为止我所做的只是部分PARTITION
声明可能会或可能不是正确的方法,但我无法弄清楚如何比较集合中的数量 :
WITH setdata as
(select *, row_number() OVER(
PARTITION by s.setitemid order by s.setitemid) position from set_table s )
// descending just to get newer sets
SELECT* from setdata order by setitemid desc
答案 0 :(得分:0)
如果我正确地遵循您的要求,应该这样做:
SELECT p1.SetItemId
from (-- IsPrimary = 1
select SetItemID, ComponentItemId, Quantity
from SetData
where IsPrimary = 1) p1
inner join (-- IsPrimary = 0
select SetItemID, ComponentItemId, Quantity
from SetData
where IsPrimary = 0) p0
on p0.SetItemID = p1.SetItemID
and p1.Quantity > p0.Quantity
--and p1.Quantity = p0.Quantity
将最后一行用于数量相等的集合。
答案 1 :(得分:0)
SELECT *
FROM set_table a
WHERE isPrimary = 1
AND quantity > (SELECT quantity
FROM set_table b
WHERE a.setItemId = b.setItemId
AND isPrimary = 0)
ORDER BY setItemId DESC
或者
SELECT a.*
FROM set_table a
INNER JOIN set_table b
ON a.setItemId = b.setItemId
AND a.isPrimary = 1
AND b.isPrimary = 0
WHERE a.quantity > b.quantity