2015-10-29 100 views
0

我有一些来自多维数据集的数据。SQL case语句依赖于结果集中的其他行

enter image description here

我在这个顺序,在已经作为替代方一行,但我需要把它的数量差异桶。那它是否是一个替换决定的代码是在此间举行的最低水平(这是一个大的CTE内)(该立方体后面的代码是巨大和存在于多个层面)

CASE 
    WHEN ISNULL(PC.ItemDimCostPrice, SC.ItemDimCostPrice) = 1 
     AND (PC.ConfigId <> SC.ConfigId 
      OR PC.InventColorId <> SC.InventColorId 
      OR PC.InventSizeId <> SC.InventSizeId 
      OR PC.InventStyleId <> SC.InventStyleId) 
     THEN 1 
     --New code here ... THEN 0 
    WHEN PC.[Resource] IS NULL 
     OR SC.[Resource] IS NULL 
     THEN 1 
    ELSE 0 
END AS [HasSubstitutionVariance] , 

,他们给出的逻辑我需要添加到这个基本上是如果成本分组是重要的(我知道如何计算),并存在具有相同costgroupid和operationid(在生产订单内)的另一个记录,那么这将永远不会是一个替代方差。我正在考虑使用rownumber,并在costgroupid和operationid上进行分区,但据我所知,您不能在case语句中使用窗口函数?任何人有任何想法我会如何做到这一点?谢谢!

+0

做什么?这是完全不清楚你在说什么。 –

+0

标记替换方差为0 – jhowe

+0

没有读取整个问题,但在SQL中,当您想要执行CASE表达式时,该表达式涉及同一个表中不同行的值时,需要使用子查询或自身加入以获得其他行的值。 –

回答

0

所以这就是我想出来的。实际上相当简单。正如我在帖子中所说,代码是在CTE中。我离开了那个代码独自一人,后来在CTE我加

CASE WHEN MC.HasSubstitutionVariance = 1 
         AND (COUNT(MC.CostGroupId) OVER (PARTITION BY MC.ProdId, 
                 MC.CostGroupId, 
                 MC.OprId) > 1 
          AND LEFT(MC.CostGroupId, 3) IN ('LAB', 'FOH', 
                  'L T', 'F T') 
         ) THEN 0 
       ELSE MC.HasSubstitutionVariance 
      END AS HasSubstitutionVariance , 

它说是costgroup重复是标准的材料,如果为0。我是这么认为的标志替代方差你不能在壳体内使用OVER声明?还是只有某些你不能在CASE中使用的窗口函数?