如何使用完整的连接和求和SQL

时间:2016-07-15 14:35:25

标签: sql-server join

使用SQL server mgmt studio 2014的Coder-newbie。我正在尝试在两个表上完成一个完整的连接:

DAILY 
ID| NAME  | DATE      |HEALTH
1 | Tim   |01/01/2016 | 4
2 | George| 01/01/2016| 5
1 | Tim   |02/01/2016 | 8
2 | George| 02/01/2016| 7


TRAINING 
ID| DATE       |   LOAD
1 | 2016-01-01 |    60
1 | 2016-01-01 |    40
1 | 2016-02-01 |    100
2 | 2016-02-01 |    75

从表中可以看出,通常每天每个ID都有一个条目,但是每天通常会有多个条目和TRAINING的ID。 - 或者有时候只是为了混淆事情!

我想加入一个表,每个日期和id都有一行,以及该特定日期和id的加载总和。到目前为止的代码如下,但我假设我还需要一个groupby和sum运算符。这是迄今为止我取得的最好成绩

select daily.id, daily.date, health, training.date, load
From daily
full join training
on daily.id = training.id

id  |   date      |health   |date       |load
1   |   2016-01-01| 4       |2016-01-01 |60
1   |   2016-01-01| 4       |2016-01-01 |40
2   |   2016-01-01| 5       |NULL       |NULL
1   |   2016-01-02| 8       |NULL       |NULL
2   |   2016-01-02| 7       |NULL       |NULL
NULL|   NULL      |NULL     | 2016-02-01|100
NULL|   NULL      |NULL     |2016-02-01 |75

而第一行我实际上想要这样:

id  |   date      |health   |date       |load
1   |   2016-01-01| 4       |2016-01-01 |100

如果有人可以帮助我,我会非常感激,因为我正在纠结于新手编码结!

1 个答案:

答案 0 :(得分:0)

SELECT daily.id, daily.date, daily.health, SUM(training.load)
FROM daily
LEFT JOIN training
ON daily.id = training.id
AND daily.date = training.date
GROUP BY daily.id, daily.date, daily.health

如果由于某种原因这不能编译或给出正确的结果,请注意。