2015-08-14 26 views
0

我正在使用MS SQL Server Management Studio。我想要做的是獲得作爲我的每個記錄的列之一的總和,但該總和只會根據前兩列的值總結值。MS SQL Server無法獲得選擇和列正確

查詢看起來像這樣至今:

SELECT DISTINCT 
BeginPeriod, 
EndPeriod, 
(

    SUM((select FO_NumPages from tbl_Folder where FO_StatisticDateTime > BeginPeriod AND FO_StatisticDateTime < EndPeriod)) 

) AS PageCount 

FROM 
(
    SELECT 
     CONVERT(varchar(12),DATEADD(mm,DATEDIFF(mm,0,tbl_Folder.FO_StatisticDateTime),0),101) AS BeginPeriod, 
     tbl_Folder.FO_PK_ID AS COL1ID 
    FROM 
     tbl_Folder 
)AS ProcMonth1 
INNER JOIN 
(
    SELECT 
     CONVERT(varchar(12),DATEADD(mm,DATEDIFF(mm,0,tbl_Folder.FO_StatisticDateTime)+1,0),101) AS EndPeriod, 
     tbl_Folder.FO_PK_ID AS COL2ID 
    FROM 
     tbl_Folder  
)AS ProcNextMonth1 
ON ProcMonth1.COL1ID = ProcNextMonth1.COL2ID 
ORDER BY BeginPeriod DESC; 

我從獲取數據會看起來像這樣的表:

FO_StatisticsDateTime | FO_PK_ID | FO_NumPages 
------------------------------------------------- 

03/21/2013    | 24  | 5 
04/02/2013    | 22  | 6 

我想總和來算的頁數對於每個記錄的開始時段和結束時段之間的每條記錄。

我知道與select語句的總和在該函數中對列值有一個聚合錯誤。但是有沒有辦法讓每筆記錄都能得到這筆錢?

+0

當你說出「每條記錄」的頁數時,你究竟在調用一條記錄?用你的樣品數據,你想要的結果是什麼? –

+0

每行記錄。所以結果可能如下所示: beginperiod | endperiod |頁數 02/01/2013 | 03/01/2013 | 34 對於每一行我尋找開始期間和結束期間的值之間出現的頁碼總和。 – user2419568

回答

0

我相信,一切都在按預期FROM子句的作品,並會表明,這種變化對您的查詢的頂部應該得到你想要的東西:

SELECT DISTINCT 
BeginPeriod, 
EndPeriod, 
(Select SUM(FO_NumPages) 
from tbl_Folder f1 
where f1.FO_StatisticDateTime >= ProcMonth1.BeginPeriod 
AND f1.FO_StatisticDateTime <= ProcNextMonth1.EndPeriod 
) AS PageCount 

FROM 
(
    SELECT 
     CONVERT(varchar(12),DATEADD(mm,DATEDIFF(mm,0,tbl_Folder.FO_StatisticDateTime),0),101) AS BeginPeriod, 
     tbl_Folder.FO_PK_ID AS COL1ID 
    FROM 
     tbl_Folder 
)AS ProcMonth1 
INNER JOIN 
(
    SELECT 
     CONVERT(varchar(12),DATEADD(mm,DATEDIFF(mm,0,tbl_Folder.FO_StatisticDateTime)+1,0),101) AS EndPeriod, 
     tbl_Folder.FO_PK_ID AS COL2ID 
    FROM 
     tbl_Folder  
)AS ProcNextMonth1 
ON ProcMonth1.COL1ID = ProcNextMonth1.COL2ID 
ORDER BY BeginPeriod DESC; 
+0

完全做到了!謝謝!!儘管Id喜歡認爲我在SQL中,但我的技能並不好,所以我無法獲得正確的語法。再一次感謝你! :D – user2419568

0

這應該工作:

select BeginDate, 
    EndDate, 
    SUM(tbl_Folder.FO_NumPages) AS PageCount 
from (select distinct dateadd(month,datediff(month,0,FO_StatisticDateTime),0) BeginDate from tbl_Folder) begindates 
join (select distinct dateadd(month,datediff(month,0,FO_StatisticDateTime)+1,0) EndDate from tbl_Folder) enddates 
on BeginDate < EndDate 
join tbl_Folder 
on tbl_Folder.FO_StatisticDateTime >= BeginDate 
    and tbl_Folder.FO_StatisticDateTime < EndDate 
group by BeginDate, EndDate 
order by 1, 2 

我改變了你的表達式轉換的日期,因爲預期的字符串比較將無法工作。

它加入了兩個不同的開始和結束日期的子查詢來獲取所有可能的日期組合。然後它會與日期之間的數據加在一起,以便您可以拿出您的總和。

+0

謝謝Brian!這也幫助我很多! – user2419568