我要写符合下列要求的查询:多加入语句不返回预期的结果
查询应返回所有 项值的列表名为 “史蒂夫”的客户,并为每显示日期(如果有 可用) 该日期的最新状态详情。
客户表
CustomerID | CustomerName
1 | Steve
2 | John
项目表
CustomerID | EntryDate | EntryValue
1 | 5/4/2010 | 200.0
1 | 4/4/2010 | 100.0
1 | 3/4/2010 | 150.0
1 | 2/4/2010 | 170.0
2 | 5/4/2010 | 220.0
状态表
CustomerID | StatusDate | Detail
1 | 5/28/2010 | D
1 | 4/24/2010 | S
1 | 4/5/2010 | P
1 | 2/28/2010 | A
预期的输出是:
CustomerName | Date | OrderCost | Detail
Steve | 5/4/2010 | 200.0 | S
Steve | 4/4/2010 | 100.0 | A
Steve | 3/4/2010 | 75.0 | A
Steve | 3/4/2010 | 75.0 | <null>
我认为,预期的输出可能是错误的,它实际上应该是:
CustomerName | Date | OrderCost | Detail
Steve | 5/4/2010 | 200.0 | S
Steve | 4/4/2010 | 100.0 | A
Steve | 3/4/2010 | 150.0 | A
Steve | 2/4/2010 | 170.0 | <null>
考虑的要求,我不明白为什么3/4/2010日期会发生两次,第二次会有一个详细信息。我写了下面的查询:
我写了下面的查询:
SELECT Customers.CustomerName, Entries.EntryDate, Entries.EntryValue, Status.Detail
FROM Customers
INNER JOIN Entries ON Customers.CustomerID = Entries.CustomerID
LEFT OUTER JOIN Status ON Status.CustomerID = Customers.CustomersID AND Status.StatusDate <= Entries.EntryDate
WHERE (Customers.CustomerName = 'Steve')
我查询的结果是这样的:
CustomerName| EntryDate | EntryValue | Detail
Steve | 5/4/2010 | 200.00 | S
Steve | 5/4/2010 | 200.00 | P
Steve | 5/4/2010 | 200.00 | A
Steve | 4/4/2010 | 100.00 | A
Steve | 3/4/2010 | 150.00 | A
Steve | 2/4/2010 | 170.00 | NULL
任何提示上,我做错了什么在这里?我无法弄清楚...
更新 我已经改变了顺序到一个条目,所以它不会混淆我们那么多。
这是功课?如果是这样,也许给定的输出只是一个例子,并不完全是你需要得到的。订单成本为75.0的订单中没有看到任何条目。 – 2011-03-12 04:04:17
@Bertrand:OP输出中5/4/2010订单的状态详细信息不正确。有3行返回,每个都有不同的状态详细信息,而不是一行状态详细信息为“已发货”。 – 2011-03-12 04:10:01
@Mattt,我会检查我的输出结果......我手工复制了很多这些东西,所以我可能会犯一个错字。 – Kiril 2011-03-12 04:27:01