如何在不使用Group By的情况下在两个字段上分组?

时间:2014-06-19 00:23:40

标签: sql sql-server group-by

我有一个消息表,其中包含消息,线程,工作组ID和工作组ID。当from_wg_id为null时,我知道该消息来自学生。如果它不为null,我知道该消息是来自工作组中的员工。当to_wg_id为null时,我知道该消息是对学生的回复,并且当from_wg_id不为null且to_wg_id不为null时,我知道该消息是从一个员工到前进另一个。这是我的挑战:我希望看到每个帖子中的所有工作组(为简单起见,我只在这里显示一个:19407),其中两者回复学生 a转发给另一名员工。我怎么做?我已尝试过group by但我一直在输出中获得CESADM,因为那只有回复我不想表明。

源表:Message_log

Message_ID  Thread_ID   FROM_WG_ID  TO_WG_ID
1           19407       CESADM      NULL
2           19407       NULL        SCHOLAR     
3           19407       NULL        SCHOLAR     
4           19407       SCHOLAR     NULL
5           19407       SCHOLAR     CESADM

所需的输出表:Message_log

Thread_ID   FROM_WG_ID      
19407       SCHOLAR         

如何编写将生成所需输出表的查询? (此输出的原因是SCHOLAR是线程19407中唯一具有转发回复消息的工作组)

1 个答案:

答案 0 :(得分:1)

您可以使用EXISTS查看是否找到了转发给其他员工:

SELECT 
    Thread_ID,
    TO_WG_ID 
FROM Messages M1
WHERE FROM_WG_ID IS NULL
AND EXISTS(
   SELECT NULL FROM Messages M2
   WHERE M2.Thread_ID = M1.Thread_ID
     AND M2.FROM_WG_ID = M1.TO_WG_ID  
     AND TO_WG_ID IS NOT NULL)