繁体   English   中英

比较同一表中两列中的值并创建新列

[英]Comparing values in two columns in same table and creating new column

这一定很容易查询,但由于某种原因,我无法获得正确的查询。 我正在使用 Oracle SQL。 我有一张桌子,上面有互相送礼物的人的详细信息,我想跟踪互相交换礼物的人。 我正在尝试比较同一张表中的两列。

桌子:

SenderId  |  Sender    |  ReceiverId  |  Receiver  |
   1      |  Christen  |       30     |  Sharyn    |
   2      |  Will      |      5       |  Madeline  |
   7      |  Kim       |      25      |  Lee       |
  30      |  Sharyn    |       1      |  Christen  |
  25      |  Lee       |      7       |   Kim      | 

预期结果表:

 Sender    |  Receiver  | Exchanged_Gift
 Christen  |  Sharyn    |      1
 Will      |  Madeline  |      0
 Kim       |  Lee       |      1

由于有两组人交换了礼物,如果他们交换了礼物,则新列将有1,否则为0。

第一组——克里斯汀和莎琳都交换了礼物。
第二组——金和李也交换了礼物。

您可以简单地使用leastgreatest function 如下:

Select case when count(1) = 1 then max(sender) else least(sender,receiver) end as sender, 
       case when count(1) = 1 then max(receiver) else greatest(sender,receiver) end as receiver,
       count(1) - 1 as exchanged_gifts
  From your_table
Group by least(sender,receiver), greatest(sender,receiver)

这有点棘手,因为当只有一行时,你想保持原来的顺序。 一种方法是使用union all进行聚合:

select least(sender, receiver) as sender, greatest(sender, receiver) as receiver, 1 as exchanged
from t
group by least(sender, receiver), greatest(sender, receiver)
having count(*) = 2
union all
select sender, receiver, 0
from t
where not exists (select 1
                  from t t2
                  where t2.receiver = t.sender and t2.sender = t2.receiver
                 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM