【问题标题】:SQL Server partition unnormalized dataSQL Server 分区非规范化数据
【发布时间】:2012-09-07 13:26:40
【问题描述】:

我认为可能有一种方法可以对其进行分区以找到我想要的东西,但我看不到它。我有一些关于产品集的稍微未标准化的数据:

SetItemID   ComponentItemID quantity    IsPrimary
123         234             1           1
123         345             2           0
456         567             3           1
456         678             2           0

我需要找到quantity 所描述的集合,例如,IsPrimary 组件的quantity > 'IsPrimary=0component'squantity.我还需要找到组件之间数量相等的集合等。如果需要,可以为此使用多个语句

到目前为止,我只有部分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

【问题讨论】:

    标签: sql-server sql-server-2008 normalization database-partitioning


    【解决方案1】:

    如果我正确地遵循了您的要求,那么应该这样做:

    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
    

    将最后一行用于相同数量的集合。

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

        猜你喜欢
        • 2013-11-21
        • 2018-04-17
        • 2016-05-27
        • 2012-11-18
        • 2011-06-14
        • 2017-01-14
        • 1970-01-01
        • 2012-12-31
        • 2010-10-06
        相关资源
        最近更新 更多