SQL case语句依赖于结果集中的其他行

时间:2015-10-29 17:20:12

标签: sql-server sql-server-2012

我有一些来自多维数据集的数据。

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的另一个记录(在生产订单中)那么这绝不会是替代方差。我正在考虑在costgroupid和operationid上使用rownumber和分区,但据我所知你不能在case语句中使用窗口函数?任何人有任何想法我会怎么做?谢谢!

1 个答案:

答案 0 :(得分: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 ,

其中说的是重复的成本组,它是标准材料,如果是这样,将替换方差标记为0.我认为你不能在CASE语句中使用OVER?或者只是CASE中不能使用的某些窗口函数?