SQL Server案例陈述 - 按事务分组时,从其他两个列中派生一列

时间:2017-07-17 07:32:13

标签: sql-server

我希望根据以下方案申请制作一个标志。我所追求的源表和所需结果如下表所示。

SRCE_SYST_FLAG不为空(以及= Y)时,请使用DERIVED_FLAG列中的值创建新标记(SRCE_SYST_FLAG),否则使用{ {1}}列。

但是,如果同一GENERIC_FLAG组中的其他记录填充了TRAN_ID列,请将SRCE_SYST_FLAG设置为另一个DERIVED_FLAG。这是SRCE_SYST_F下面的情况。

有人会知道如何使用案例陈述吗?我可以创建一个通用的,例如下面的那个,但是这不会使用TRAN_ID = 2222作为NULL的记录,但是SRCE_SYST_FLAG填充了该tran_id组中的另一个记录:

SRCE_SYST_FLAG

样本数据集:

CASE
   WHEN SRCE_SYST_Flag = 'Y' 
      THEN SRCE_SYST_FLAG 
      ELSE GENERIC_FLAG
END AS 'DERIVED_FLAG' 

期望的结果:

Client | Limit        | Pdct_type_c |  SRCE_SYST_FLAG | GENERIC_FLAG |  TRAN_ID 
--------------------------------------------------------------------------------
John   | 4,000,000.00 | DCO         |  y              | N            | 2222
John   |              | DCO         |  NULL           | N            | 2222
Mark   | 2,000,000.00 | DCO         |  NULL           | N            | 435
Mark   |              | DCO         |  NULL           | N            | 435
Luke   | 4,000,000.00 | DCO         |  N              | Y            | 980

我感谢任何帮助,

干杯

1 个答案:

答案 0 :(得分:1)

使用SUM OVER计算每个tran_id的“Y”数:

select client
, limit
, Pdct_type_c
, TRAN_ID
, case when SUM(case when SRCE_SYST_FLAG = 'Y' then 1 else 0 end) OVER (partition by tran_id) > 0 then 'Y' else GENERIC_FLAG end DERIVED_FLAG
from table