我試圖從表中獲取隨時間變化的也是SQL Server的Windows服務器的百分比。雖然我可以得到聚合數學,但我無法讓GROUP BY去計算每個獨特的報告日期。有沒有另一種方法來做到這一點?我不想使用case函數,因爲報表日期是迭代的並且是動態的(時間戳),並且每次生成新報表時我都必須修改語句。劃分兩個SQL選擇語句並按日期字段(或類別)對結果進行分組
這裏是我的數據集:
[IP Address] | [OS] | [SQL Server] | [Report Date]
127.1.1.0 | Win2k12 | 1 | 9/1/2016
127.1.1.1 | Win2k12 | 0 | 9/1/2016
127.1.1.3 | Win2k12 | 1 | 9/1/2016
127.1.1.4 | Win2k12 | 0 | 9/1/2016
127.1.1.5 | Win2k12 | 0 | 9/1/2016
127.1.1.0 | Win2k12 | 1 | 10/1/2016
127.1.1.1 | Win2k12 | 0 | 10/1/2016
127.1.1.3 | Win2k12 | 1 | 10/1/2016
127.1.1.4 | Win2k12 | 0 | 10/1/2016
127.1.1.5 | Win2k12 | 0 | 10/1/2016
127.1.1.6 | Win2k12 | 0 | 10/1/2016
127.1.1.7 | Win2k12 | 1 | 10/1/2016
這裏是我迄今:
SELECT
(SELECT CAST(COUNT(DISTINCT [IP Address]) AS FLOAT(4))
FROM ediscov_report
WHERE [SQL Server] = 1
AND (DATEPART(MONTH, (DATEADD(M, +2, [Report Date]))) = (DATEPART(MONTH, GETDATE())))
AND (DATEPART(YEAR, [Report Date]) = (DATEPART(year, GETDATE()))));
(SELECT CAST(COUNT(DISTINCT [IP Address]) AS FLOAT(4))
FROM ediscov_report
WHERE (DATEPART(MONTH, (DATEADD(M, +2, [Report Date]))) = (DATEPART(MONTH, GETDATE())))
AND (DATEPART(YEAR, [Report Date]) = (DATEPART(year, GETDATE()))));
這裏是我試圖讓結果:
[Report Date] | [PCT SQL]<BR> 9/1/2016 | .4<BR> 10/1/2016 | .428571
這很接近,但我沒有得到正確的數字。主要原因是因爲報告中有重複。同一臺服務器可能會出現多次。我改變了計數(*)來統計(不同的IP地址),這給了我合適數量的服務器,但重複數據影響了Sum SQLServer的數量和平均值。如果我們能找出一種方法來爲獨特的主機做數學運算,那麼我們應該得到正確的數值。我會玩弄這個,看看我能否弄清楚。感謝您的幫助!我不會想到嘗試這種方法。 – npeach
我將此標記爲本示例所用答案。以我提供的數據集爲例,這完美地工作。但是我有真正的數據集有重複的行,拋出計算。感謝您的幫助!我想我知道我現在需要怎樣處理它。 – npeach