2011-07-20 66 views
1
Name  ExactDate Presents  Location 
bob1   2011  1   home 
bob2   2008  2   school  
bob2   2012  3   school 
mary2  1986  4   school  
mary1  2001  5   home 
mary1  2012  6   home  
kate1  2011  7   home 
kate1  2012  8   home 
kate2  2011  9   school 
celia2  2011  10   school 
celia2  1986  11   school 
celia1  1972  12   home 
celia1  2012  14   home 
celia2  2012  13   school 

對於查詢,此問題在MS Access 2003中的SQL中完成。使用EXTRA CRITERIA在兩行之間進行計算?

所以我們的目標是減去同一年從西莉亞得到的禮物的數量(但是因爲同一年有幾個不同的現值,我們選擇優先考慮家庭>學校......例如西莉亞和凱特都收到禮物在2012年,但西莉亞得到雙方家庭的禮物和學校提供了2012年在這種情況下,我們選擇她家現值做​​計算),並進行放應該是這樣的:

Name    ExactDate  PresentsDiff 
celiaminuskate  2011      3 
celiaminuskate  2012      6 

到目前爲止我有:

SELECT 'celiaminuskate'AS [NAME],T1.[date] AS [EXACT DATE], 
T1.presents T2.presents AS [PRESENTS DIFF] 
FROM Some_Table T1, Some_Table T2 

我認爲需要修復的部分?

WHERE (T1.Name = 'celia1'>'celia2') 
AND (T2.Name = 'kate1'>'kate2') 
AND T2.ExactDate = T1.ExactDate 

表示優先?我不太確定如何去做

ORDER BY T1.ExactDate 
+1

可能的重複[如何計算使用MS Access 2003 SQL的一個表的兩行值之間的差異?與EXTRA CRITERIA](http://stackoverflow.com/questions/6750282/how-to-calculate-the-difference-between-values-in-two-rows-of-one-table-using-ms) – JNK

+2

如果這是作業,它應該被標記爲家庭作業。這是另一個相同問題的副本:http://stackoverflow.com/questions/6722805/how-do-i-sum-one-column-within-a-grouping-of-another-column –

+0

嘿,那是我的問題,但現在有一個額外的「標準」添加到它,使它更加困難 –

回答

1

我創建了這個查詢並將其保存爲qryCeliaAndKateGiftDates。它只是返回了celia和kate都有禮物記錄的截然不同的ExactDate值。

通知我重新命名了名稱收件人,因爲名稱是一個保留字。

SELECT DISTINCT celia.ExactDate 
FROM 
    [SELECT ExactDate 
    FROM Some_Table 
    WHERE Recipient Like "celia*" 
    ]. AS celia 
    INNER JOIN [ 
     SELECT ExactDate 
     FROM Some_Table 
     WHERE Recipient Like "kate*" 
     ]. AS kate 
    ON celia.ExactDate = kate.ExactDate 
ORDER BY celia.ExactDate; 

然後我用相關子查詢以返回在每個那些ExactDates用於西莉亞和凱特正確的禮物值。

SELECT 
    raw.recipients AS [NAME], 
    raw.ExactDate AS [EXACT DATE], 
    (raw.celia_presents - raw.kate_presents) AS [PRESENTS DIFF] 
FROM 
    [SELECT 
    'celiaminuskate' AS recipients, 
    dates.ExactDate, 
    (SELECT TOP 1 Presents 
    FROM Some_Table 
    WHERE 
     Recipient Like "celia*" 
     And ExactDate = dates.ExactDate 
    ORDER BY Location) AS celia_presents, 
    (SELECT TOP 1 Presents 
    FROM Some_Table 
    WHERE 
     Recipient Like "kate*" 
     And ExactDate = dates.ExactDate 
    ORDER BY Location) AS kate_presents 
    FROM qryCeliaAndKateGiftDates AS dates]. AS raw; 

它返回從Access 2003中運行時,但是相關子查詢是出了名的慢,你所要求的結果,所以我有興趣看看你會得到什麼答案。

+0

嘿,我想知道你怎麼用「 - 」來減去。所以你也可以使用「+」來添加? ive嘗試過,而不是將這些值加在一起,它是這樣做的:123 + 0.28 = 1230.28是不是可能與文本格式的數字有關?但我從來沒有改變格式從我使用「 - 」和那工作。謝謝 –

+0

不要說它的所有好nwo,因爲你已經知道哈哈謝謝但agian =)....我需要停止打字如此可怕... –