2014-09-26 46 views
0

我正在嘗試編寫一個能夠計算數據庫文件組可用空間的查詢。 我有包含以下信息(這被過濾以1分貝僅)一個@table:SELECT DISTINCT filegroups和跨多個掛載點的總可用空間(SQL Server)

enter image description here

「FREE_SPACE」計算一個來顯示在一個文件中具有總的可用空間請記住文件是否具有自動增長功能以及它所在的安裝點的大小。

從這張表我試圖做一個選擇哪一個會返回我的結果爲所有數據庫和他們的文件組在不同的掛載點計算它們的可用空間。

示例:如果1個數據庫的所有文件都在一個磁盤上 - 返回該磁盤的可用空間;如果它的文件位於多個磁盤上 - 返回兩個(或更多)磁盤的可用空間; (每個文件的可用空間位於上表中)。

到目前爲止我在這裏:

SELECT 
database_name 
,groupid 
,groupname 
,SUM(file_size) as file_size 
--- The next two do the same thing; 
,SUM(free_space)/(count (*) * 1.0) as free_space 
,AVG(free_space) 
,mount_point 
FROM @file_size 
--where database_name = 'kosevk' 
GROUP BY mount_point, database_name, groupname 
ORDER BY database_name 

這一點,直到我添加一個文件不同的磁盤上(例如是G盤:)文件kosevk_data7運行好嗎 - 然後返回兩行主文件組。

http://i.imgur.com/pwDLnj1.png

我需要有一次列出的每個文件組。

回答

1

您可以從GROUP BY子句中刪除mount_point,並在select中註釋掉mount_point,如下所示。

希望它能幫助你。

選擇 數據庫名稱 ,羣ID ,組名 ,SUM(FILE_SIZE)爲FILE_SIZE ---接下來的兩個做同樣的事情; ,SUM(FREE_SPACE)/(COUNT(*)* 1.0)作爲FREE_SPACE ,AVG(FREE_SPACE) - ,裝入點 FROM @file_size --where DATABASE_NAME = 'kosevk' GROUP BY DATABASE_NAME,組名 ORDER BY數據庫名稱

1

這似乎是查詢:

;With CTE AS (SELECT 
database_name 
,groupid 
,groupname 
,SUM(file_size) as file_size 
--- The next two do the same thing; 
,SUM(free_space)/(count (*) * 1.0) as free_space 
,AVG(free_space) 
,mount_point 
FROM @file_size) 
select database_name, sum(file_size), sum(free_space), mount_point 
group by database_name, mount_point