任何人都可以帮助我如何实现以下结果
输入数据
ORDER_NUMBER LINE_ITEM FLAG
LP-13288 1 TRUE
LP-13288 2 FALSE
LP-13288 3 (null)
LP-13288 4 FALSE
LP-13289 1 FALSE
LP-13289 2 FALSE
LP-13290 1 TRUE
LP-13290 2 TRUE
LP-13290 3 TRUE
LP-13292 1 FALSE
LP-13293 2 TRUE
但我期待如下结果:
ORDER_NUMBER LINE_ITEM FLAG RESULT
LP-13288 1 TRUE 0
LP-13288 2 FALSE 0
LP-13288 3 (null) 0
LP-13288 4 FALSE 0
LP-13289 1 FALSE 0
LP-13289 2 FALSE 0
LP-13290 1 TRUE 1
LP-13290 2 TRUE 1
LP-13290 3 TRUE 1
LP-13292 1 FALSE 0
LP-13293 2 TRUE 1
需要实现的场景
对于一组 order_number,如果所有订单项都为“true”,则结果字段需要为“1”
对于一组 order_number,如果任何订单项包含混合标志(true、false、null),则结果字段需要填充 '0'
任何帮助,将不胜感激。
您可以使用窗口聚合(带有
OVER
子句的聚合函数)将条件应用于一列值,同时计算详细信息行的结果。以下是在您的情况下如何使用窗口聚合:该
COUNT(CASE flag WHEN 'true' THEN 1 END) OVER (PARTITION BY order_number)
表达式计算每个真值的数量,order_number
并为具有相同 的行返回相同的值order_number
。因此,您也可以在行组内生成相同的值。上述的变体(使用反向逻辑和一次计数而不是两次):
使用 CTE 轻松完成。
基本上,我正在汇总数据并获取每个订单的标志总和。
那么满足这个条件:
...通过简单地检查每个订单的标志总和是否与该订单的行数相同。
稍作修改即可获得所需的输出