SQL查询以选择值的唯一组合,忽略两列顺序

SQL查询以选择值的唯一组合,忽略两列顺序,sql,Sql,我试图构建一个SQL查询,其中根据特定的条件选择唯一的行,但我不知道如何构建它 行具有varchar会话ID、varchar发送方和varchar接收方 我需要的结果是会话ID、发送者和接收者的所有不同组合,但接收者列中发送者的重复或反之亦然,都被视为相同 例如: ID ,Sender ,Recip ------------------------- Convo1 ,PersonA ,PersonB Convo1 ,PersonB ,PersonA Con

我试图构建一个SQL查询,其中根据特定的条件选择唯一的行,但我不知道如何构建它

行具有
varchar
会话ID、
varchar
发送方和
varchar
接收方

我需要的结果是会话ID、发送者和接收者的所有不同组合,但接收者列中发送者的重复或反之亦然,都被视为相同

例如:

ID      ,Sender      ,Recip
-------------------------
Convo1  ,PersonA     ,PersonB
Convo1  ,PersonB     ,PersonA
Convo1  ,PersonC     ,PersonA
Convo1  ,PersonC     ,PersonA
Convo1  ,PersonA     ,PersonC
Convo1  ,PersonC     ,PersonA
Convo2  ,PersonB     ,PersonD
Convo2  ,PersonB     ,PersonA
将返回以下内容的查询:

Convo1, PersonA, PersonB
Convo1, PersonC, PersonA
Convo2, PersonB, PersonD
Convo2, PersonB, PersonA

在标准SQL中,可以使用
case
语句执行此操作:

select id, (case when sender < recip then sender else recip end) as person1,
       (case when sender < recip then recip else sender end) as person2
from conversations
group by id,
         (case when sender < recip then sender else recip end),
         (case when sender < recip then recip else sender end);

在标准SQL中,可以使用
case
语句执行此操作:

select id, (case when sender < recip then sender else recip end) as person1,
       (case when sender < recip then recip else sender end) as person2
from conversations
group by id,
         (case when sender < recip then sender else recip end),
         (case when sender < recip then recip else sender end);

一种选择是以某种方式安排对话。由于您的发件人和收件人是
varchar
s,按字母顺序排列似乎是最简单的:

SELECT DISTINCT
    ID, 
    CASE WHEN Sender <= Recip
        THEN Sender
        ELSE Recip
        AS Person1,
    CASE WHEN Sender <= Recip
        THEN Recip
        ELSE Sender
        AS Person2
FROM Conversations
选择DISTINCT
身份证件

当发送者时,一种选择是以某种方式安排对话。由于您的发件人和收件人是
varchar
s,按字母顺序排列似乎是最简单的:

SELECT DISTINCT
    ID, 
    CASE WHEN Sender <= Recip
        THEN Sender
        ELSE Recip
        AS Person1,
    CASE WHEN Sender <= Recip
        THEN Recip
        ELSE Sender
        AS Person2
FROM Conversations
选择DISTINCT
身份证件

当我必须添加一个独特的组合,以获得独特的组合,但在其他情况下,这是伟大的@用户1958698。
groupby
没有产生独特的结果?我必须添加一个独特的组合来获得独特的组合,但除此之外,这非常有效@用户1958698。
group by
没有产生独特的结果?