我有一个消息表,其中包含从工作组ID到工作组ID的消息,线程。当from_wg_id为null时,我知道消息是来自学生的。当它不为null时,我知道消息是来自工作组中的一名雇员的。当to_wg_id为null时,我知道消息是对学生的答复;当from_wg_id不为null且to_wg_id不为null时,我知道消息是从一个雇员到另一名雇员的转发。这里是我的挑战:我希望看到每个线程内的所有工作组(为简单起见,我只显示一个位置:19407),其中有两个一个给学生的回复和转发给另一位员工。我怎么做?我已经尝试了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中唯一具有转发消息和已回复消息的工作组)
您可以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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句