[英]Need help with SQL query?
這是我的查詢。 我需要為每個線程只選擇一個不同的記錄但是因為我正在返回突出顯示它不能是唯一的並且為同一個步驟返回兩個記錄。
請幫我修改我的查詢以使其工作。 謝謝
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
我一直看到這個問題。 您將不得不決定您想要哪些值。 正如@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語句是如何工作的,但這是一般的想法。
你必須選擇要使用的值的狀態/亮點,如果有不止一個。 這是一個選項 - 使用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()或任何其他聚合函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.