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;
我有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
.
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;