2013-05-27 101 views
1

我有一個MS訪問2010數據庫與兩個不相關的表:天和週期。像這些:如何使用ms訪問中無關表的範圍創建sql查詢?

Days 
----- 
Day (Date) 
Value (Integer) 

Periods 
----- 
PeriodNum (Integer) 
StartDate (Date) 
EndDate (Date) 

我想獲得一個新的表,如下所示:

Periods_Query 
----- 
PeriodNum (Integer) 
Value (Integer) - sum of all Values from table Days, where Day is in between 
        StartDate and EndDate 

我試圖建立一個SQL查詢,但我不知道如何獲得範圍。嘗試了這樣的事情,但它沒有工作:

SELECT Period, Sum(Value) FROM Days, Periods; 

那麼,有沒有辦法建立這樣的查詢?

謝謝。

回答

1

開始使用純SELECT查詢,你想鞏固基​​礎數據。

SELECT d.Date, d.Value, p.[Period #], p.StartDate, p.EndDate 
FROM Days AS d, Periods AS p 
WHERE d.Date BETWEEN p.StartDate AND p.EndDate; 

然後轉換爲聚集體(GROUP BY)的查詢,以計算總和。

SELECT p.[Period #], Sum(d.Value) AS SumOfValue 
FROM Days AS d, Periods AS p 
WHERE d.Date BETWEEN p.StartDate AND p.EndDate 
GROUP BY p.[Period #]; 

我得到了一個印象,你可能想將結果集存儲在另一個表中。但是,您可能認爲這是不必要的,因爲您可以在任何使用其他表的地方使用該查詢。但是,如果您確實需要存儲結果集,則可以轉換爲INSERT查詢。

INSERT INTO Periods_Query(PeriodNum, [Value]) 
SELECT p.[Period #], Sum(d.Value) AS SumOfValue 
FROM Days AS d, Periods AS p 
WHERE d.Date BETWEEN p.StartDate AND p.EndDate 
GROUP BY p.[Period #]; 
+0

感謝詳細的解釋,使用此方法。一切正常。 – rfg

0

在你創建表,空後,

運行下面的插入語句:

Insert Periods_Query(PeriodNum, SumValues) 
Select p.PeriodNum, Sum(d.Value) 
From Periods p 
    Join Days d On 
     d.Day Between p.StartDate And p. EndDate 
Group By p.PeriodNum 
0

另一種方法是使用SUM在子查詢(經測試,在訪問07):

SELECT Periods.PeriodNum, Periods.StartDate, Periods.EndDate, (SELECT SUM(DayValue) FROM Days WHERE Day BETWEEN Periods.StartDate AND Periods.EndDate) AS DaySums FROM Periods;

+0

謝謝。這也適用。 – rfg