根据特定值选择特定数据

时间:2020-04-27 16:13:00

标签: sql

我有这样的数据:

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行

2 个答案:

答案 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

select transaction#, min(type)
from t
group by transaction#

它将导致

Transaction#    Type
 123               C
 456               A

编辑:重新读取您的请求“我想要的输出是上面示例中的第1行和第3行”,我将基于戈登的想法:

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'
                 );