我有2个表,结构如下:
表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个指预算。
我想在我的表中添加一个额外的列,表示对于考虑Data_Details_Fk, Date_Fk, Entity_Fk
的方案2,3存在相同Rtype
记录时带有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
我有一个大尺寸表,想要优化查询,以便花费最少的时间来填充标记。
答案 0 :(得分:1)
我意识到我对这个问题感到有些困惑。结果表明,当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;