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