我有这样的数据:
Transaction# Amount Type
123 $400. C
456 $400. C
456 $0. A
基本上,C表示批准的交易,A表示冲销或编辑的交易。因此,批准了交易123,最初批准了456,然后将其转回为0。
我需要的只是“ C”交易。如果交易是C和A,则我要A。我尝试过自动加入,但未成功。使用SQL,但使用SAS(proc sql)。我需要交易的美元金额,但如果可能,请整行。我想要的输出是上面示例中的第1行和第3行
答案 0 :(得分:0)
如果仅需要交易,则可以使用聚合:
select transaction#
from t
group by transaction#
having min(type) = max(type) and min(type) = 'C';
如果要原始行,我建议not exists
:
select t.*
from t
where not exists (select 1
from t t2
where t2.transaction# = t.transaction# and
t2.type <> 'C'
);
答案 1 :(得分:0)
我理解您的问题的方式应该可以解决问题(基于字符串按字母顺序排列和A 它将导致 编辑:重新读取您的请求“我想要的输出是上面示例中的第1行和第3行”,我将基于戈登的想法:select transaction#, min(type)
from t
group by transaction#
Transaction# Type
123 C
456 A
select t.*
from t
where not exists (select 1
from t t2
where t2.transaction# = t.transaction# and
t2.type ='A' and t.type <> 'A'
);