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的用户。我需要在工作中完成数据管理任务。所以这真的让我陷入困境 这是在ms access 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年收到了礼物,但是西莉亚在2012年获得了家居礼物和学校礼物,在这种情况下我们选择她的家庭现值进行计算)并且外出应该是如下:
Name ExactDate Presents
celiaminuskate 2011 3
celiaminuskate 2012 6
答案 0 :(得分:3)
这应该这样做:
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 ...
(省略号只是意味着使用我在上面提到的查询)
答案 1 :(得分:2)
您需要执行self-join
,因为您要比较同一个表中的行。
下面我们使用类似日期将table1连接到自身,但名称不同
更现实的答案是使用唯一的row_id而不是名称。
接下来,我们告诉数据库我们只需要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
是保留字,您需要将其括在方括号[]
答案 2 :(得分:2)
回答这个问题的关键是自我加入:
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;
答案 3 :(得分:1)
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'