需要SQL查询的帮助?

时间:2011-08-22 23:24:28

标签: sql

这是我的查询。我需要为每个线程只选择一个不同的记录但是因为我正在返回突出显示它不能是唯一的并且返回两个记录用于相同的步骤。

请帮我修改我的查询以使其正常工作。谢谢

SELECT DISTINCT T2.Name, T0.ThreadID, (CASE WHEN T0.Status = 0 THEN 1 ELSE 0 END) AS Highlight
FROM Messaging T0
INNER JOIN Table1 T1 ON T0.ThreadID = T1.ThreadID
INNER JOIN Table2 T2 ON T0.UserID = T2.UserID
INNER JOIN Table3 T3 ON T3.ID = T0.ID
WHERE  T0.UserID != 9149 
GROUP BY U.Name, M.ThreadID 
ORDER BY Highlight DESC

此查询返回结果,如下所示

Name    ThreadID                                Highlight
Alex    048C8E05-422C-491A-880C-AE370194AE8C        1
Andrew  048C8E05-422C-491A-880C-AE370194AE8B        0
Alex    048C8E05-422C-491A-880C-AE370194AE8C        0



Table T0

RecordID    UserID               ThreadID                                 Status
1           9090                 048C8E05-422C-491A-880C-AE370194AE8C     0
2           9149                 048C8E05-422C-491A-880C-AE370194AE8C     1
3           9090                 048C8E05-422C-491A-880C-AE370194AE8C     1
4           5454                 048C8E05-422C-491A-880C-AE370194AE8B     0
5           9149                 048C8E05-422C-491A-880C-AE370194AE8B     0

2 个答案:

答案 0 :(得分:2)

我一直看到这个问题。您将不得不决定您想要哪些值。正如@James Hill所指出的那样,你已经要求所有不同的列集,这正是你得到的。

如果您真的不想要这些值的不同组合,则需要指定要丢弃的值。通常人们会采用MAX或MIN值。通常它看起来像这样:

SELECT DISTINCT T2.Name, T0.ThreadID, MAX((CASE WHEN T0.Status = 0 THEN 1 ELSE 0 END)) AS Highlight
FROM Messaging T0
INNER JOIN Table1 T1 ON T0.ThreadID = T1.ThreadID
INNER JOIN Table2 T2 ON T0.UserID = T2.UserID
INNER JOIN Table3 T3 ON T3.ID = T0.ID
WHERE  T0.UserID != 9149 
GROUP BY U.Name, M.ThreadID 
ORDER BY Highlight DESC

你必须测试其中的case语句是如何工作的,但这是一般的想法。

答案 1 :(得分:0)

如果有多个,则必须选择哪个值用于状态/突出显示。这是一个选项 - 使用max():

SELECT DISTINCT T2.Name, T0.ThreadID, max(CASE WHEN T0.Status = 0 THEN 1 ELSE 0 END) AS Highlight
FROM Messaging T0
INNER JOIN Table1 T1 ON T0.ThreadID = T1.ThreadID
INNER JOIN Table2 T2 ON T0.UserID = T2.UserID
INNER JOIN Table3 T3 ON T3.ID = T0.ID
WHERE  T0.UserID != 9149 
GROUP BY U.Name, M.ThreadID 
ORDER BY 3 DESC

您可以使用min()或任何其他聚合函数