這僅回傳存在的條目的結果,這是有道理的,但我試圖讓它顯示所有 B.[HostName] 條目,即使沒有所有條目的條目。我希望它在這些計數下顯示 0。我讀過需要在某些表上使用 LEFT JOIN 并更改 COUNT(*) 以使用欄位,但是每當我嘗試這樣做時,它仍然會產生相同的資料。誰能告訴我需要改變什么才能按照我提到的方式作業?
編輯:澄清一下,因為最初的答案不起作用:計數將來自這個表:[Database].[dbo].[WorkItemHistory] ??A——我們想要 A.[PlatformId] 的所有條目
A.[PlatformId] 是 C.[Id] 的外鍵和 C.[EngineId] 是 B.[Id] 的外鍵
從那里,我們得到 B.[HostName]
因此,B.[HostName] 的所有條目都將列在輸出中,并且計數將來自 A.[WorkitemHistory] ??表中的條目。
我們正在使用
SELECT DISTINCT B.[HostName], COUNT(*) AS Count
FROM [Database].[dbo].[WorkItemHistory] A, [Database].[dbo].[Engine] B, [Database].[dbo].[Platforms] C
WHERE A.[PlatformId] = C.[Id]
AND B.[Id] = C.[EngineId]
AND A.[Status] = '30'
AND A.[LastAttemptDateTime] >= CAST(GETDATE() AS Date)
GROUP BY B.[HostName]
ORDER BY COUNT(*) DESC
uj5u.com熱心網友回復:
用 下面JOIN的RIGHT JOIN B類似替換你的,以給出在其他人中沒有任何共同價值的 B 的價值。
SELECT B.[HostName], COUNT(*) AS Count
FROM [Database].[dbo].[WorkItemHistory] A
JOIN [Database].[dbo].[Platforms] C
On A.[PlatformId] = C.[Id]
RIGHT JOIN [Database].[dbo].[Engine] B
On C.[id]=B.[EngineId]
Where A.[Status] = '30'
AND A.[LastAttemptDateTime] >= CAST(GETDATE() AS Date)
GROUP BY B.[HostName]
ORDER BY COUNT(*) DESC
uj5u.com熱心網友回復:
我認為像這樣的事情會做到這一點。您只需要將其他表左連接到 [Database].[dbo].[Engine],因為您需要所有主機名。
SELECT B.[HostName],
COUNT(C.ID) AS Count
FROM [Database].[dbo].[Engine] B
LEFT JOIN [Database].[dbo].[Platforms] C
ON B.[Id] = C.[EngineId]
LEFT JOIN [Database].[dbo].[WorkItemHistory] A
ON A.[PlatformId] = C.[Id]
AND A.[Status] = '30'
AND AND A.[LastAttemptDateTime] >= CAST(GETDATE() AS Date)
GROUP BY B.[HostName]
ORDER BY COUNT(*) DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385375.html
標籤:sql
上一篇:每個類別的前2名
下一篇:PHP、SQL-插入選擇案例
