按2个具有切换值的列进行分组(字符列)

时间:2019-05-30 09:17:55

标签: sql

我有一个绝望的问题:)我想将数据按sas的proc sql中的2列进行分组。

这里是例子

A           B          C
--------------------------    
John      Smith        5
Smith     John         4
Adam      Gibbs        3 

我想要的结果是:

A           B           C
---------------------------
John       Smith        9
Adam       Gibbs        3

我想对2个可能具有切换值的列中的值进行分组。

无论“边”是什么值,只要它们在2列中相同即可。这些是字符列,因此不能使用最小或最大功能。请帮助!!!)

1 个答案:

答案 0 :(得分:1)

您可以这样表示聚合:

proc sql;
    select (case when a < b then a else b end) as a,
           (case when a < b then b else a end) as b,
           sum(c)
    from t
    group by (case when a < b then a else b end),
             (case when a < b then b else a end);

请注意,这可以返回不在原始数据中的对。如果有问题,可以使用:

proc sql;
    select a, b, sum(c)
    from ((select a, b
           from t
           where a < b or
                 not exists (select 1 from t t2 where t2.a = t.b and t2.b = t.a)
          ) union all
          (select b, a
           from t
           where b < a and
                 exists (select 1 from t t2 where t2.a = t.b and t2.b = t.a
          )
         ) t
    group by a, b;