SQL SSMS - 查找并标记现有记录和标记

SQL SSMS - find and flag existing record and flag

我有2个table,结构如下:

表 1:

Data_Details_Fk Date_Fk Entity_Fk   Scenario_Fk Value
60              3652    13          2           10
56              3652    11          2           81
58              3652    10          2           43
57              3652    12          3           79
59              3652    14          2           27
59              3652    10          2           49
59              3652    10          3           76
58              3652    10          3           35
56              3652    11          3           44
57              3652    11          2           40

表 2:

Data_Details_Sk Rtype
60              PL
56              PL
58              BS
57              BS
59              CF

我有 2 个场景,即 2 个是实际的,3 个是预算的。 我想用附加列标记我的 table,当考虑到 Rtype.

时,当场景 2,3 存在相同的 Data_Details_Fk, Date_Fk, Entity_Fk 记录时,标记行为 1

标记所有预算,其中实际组合可用于实体、datadetails(不是真正在 DataDetails 上,而是 RType 作为连接)。 Rtype 基本上是为 data_details_fk.

加载的 PL、BS、CF 的报告

所需输出为:

Data_Details_Fk Date_Fk Entity_Fk   Scenario_Fk Value   IsFlag
60              3652    13              2       10      0
56              3652    11              2       81      1
58              3652    10              2       43      1
57              3652    12              3       79      0
59              3652    14              2       27      0
59              3652    10              2       49      1
59              3652    10              3       76      1
58              3652    10              3       35      1
56              3652    11              3       44      1
57              3652    11              2       40      0

我的尺寸很大 table,我想优化查询以花费最少的时间来填充标志。

我意识到我对这个问题有点困惑。结果表明,当 Scenario_FK 对于其他列的组合同时具有 0 和 1 时,您希望将行标记为 1。如果这是正确的并且只允许 2 和 3 的值,那么一种方法是:

select t1.*,
       (case when min(Scenario_Fk) over (partition by Data_Details_Fk, Date_Fk, Entity_Fk) = 2 and
                  max(Scenario_Fk) over (partition by Data_Details_Fk, Date_Fk, Entity_Fk) = 3
             then 1 else 0
        end) as isFlag
from table1 t1;