[英]How to calculate the difference between values in two rows of one table using MS Access 2003 SQL? with EXTRA CRITERIA
Name ExactDate Presents
bob 2011 1
bob 2008 2
bob 2012 3
mary 1986 4
mary 2001 5
mary 2012 6
kate 2011 7
kate 2012 8
kate 2013 9
celia 2011 10
celia 1986 11
celia 1972 12
celia 2012 13
celia 1991 14
所以我們的目標是我們減去凱特在同一天從西莉亞那里得到的禮物數量,結果應該是這樣的:
Name ExactDate Presents
celiaminuskate 2011 3
celiaminuskate 2012 5
非常感謝我是第一次訪問和 SQL 的用戶。 並且有我在工作中需要的數據管理任務。 所以這真的讓我卡住了 go 這是在 ms 訪問中完成的 2003 SQL
嘿,所以我得到了第一部分,現在假設數據集現在變得像這樣變得更加困難
Name ExactDate Presents Location
bob 2011 1 home
bob 2008 2 school
bob 2012 3 school
mary 1986 4 school
mary 2001 5 home
mary 2012 6 homw
kate 2011 7 home
kate 2012 8 home
kate 2011 9 school
celia 2011 10 school
celia 1986 11 school
celia 1972 12 home
celia 2012 14 home
celia 2012 13 school
所以我們的目標是我們減去凱特在同一年從西莉亞那里得到的禮物數量(但由於同一年有幾個不同的現值,我們選擇優先家庭>學校......例如西莉亞和凱特兩人都在 2012 年收到了禮物,但 celia 在 2012 年同時收到了家庭禮物和學校禮物,在這種情況下,我們選擇她的家庭現值進行計算),輸出應該類似於以下內容:
Name ExactDate Presents
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
INNER JOIN Some_Table T2 ON
T2.[name] = 'kate' AND
T2.[date] = T1.[date]
WHERE
T1.[name] = 'celia'
ORDER BY
T1.[date]
一些建議,因為您是 SQL 的新手:
由於聽起來您正在使用的 Access 版本不支持現在的標准JOIN
語法,因此這里是另一個應該等效的查詢:
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] = 'celia' AND
T2.[name] = 'kate' AND
T2.[date] = T1.[date]
ORDER BY
T1.[date]
此查詢中的T1
和T2
只是FROM
子句中表的別名,以便您可以區分它們。
如果您嘗試將結果放入另一個表中,那么您需要將其作為INSERT
語句的一部分。 或者,使用 Access,您可能能夠使用查詢來生成表作為某些向導的一部分。 恐怕我沒有手邊的副本來提供更多細節。 無論如何,下面是INSERT
語句的樣子:
INSERT INTO Some_New_Table (name, exactdate, presentsdiff)
SELECT ...
(省略號只是意味着使用上面的查詢)
您將需要進行self-join
,因為您正在比較同一個表中的行。 下面我們使用模擬日期將 table1 連接到自身,但名稱不同。
更現實的答案是使用唯一的 row_ids 而不是名稱。 接下來,我們告訴數據庫我們只需要 part1 中的celia
的行和 part2 中的kate
的行。
SELECT 'celiaminuskate' AS useless_filler
, a.[date] AS whendidthishappen
, (celia.presents - kate.presents) AS outcome
FROM table1 AS kate
INNER JOIN table1 AS celia ON (a.[date] = b.[date] and a.name <> b.name)
WHERE celia.name = 'celia' and kate.name = 'kate'
請注意, date
是保留字,您需要將其括在方括號[]
中
回答這個問題的關鍵是自加入:
SELECT 'Celia - Kate' AS tag, C.ExactDate, C.Presents - K.Presents
FROM (SELECT ExactDate, Presents FROM AnonymousTable WHERE Name = 'celia') AS C
JOIN (SELECT ExactDate, Presents FROM AnonymousTable WHERE Name = 'kate') AS K
ON C.ExactDate = K.ExactDate
ORDER BY C.Date;
SELECT 'celiaminuskate', p1.exactdate, p1.presents - p2.presents
FROM presents p1 JOIN presents p2 ON p1.exactdate = p2.exactdate
WHERE p1.name = 'celia' AND p2.name = 'kate'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.