2013-01-16 22 views
1

我有一个SQL Server 2005表,用于存储两位学生之间进行的图书交换。如何为这个数据生成一个SQL查询?

ExchangeID BookID ExchangeDate FromPersName ToPersName 
1   23  23.12.2011  John   Matt 
2   22  15.02.2012  Billy   Ken 
3   23  27.12.2011  Matt   Riddley 
5   23  05.03.2012  Riddley  Josh 
6   22  08.03.2012  Ken   Rachel 
7   23  19.03.2012  Josh   Laura 
8   23  15.01.2013  Laura   Mike 
9   22  17.01.2013  Rachel   Stephanie 

我要生成一个指定年份,看起来像这样的报告:

Year:2012 

BookID PersonName  ReceivingDate DeliveryDate 
23  Matt   01.01.2012  27.02.2012 
23  Riddley   27.02.2012  05.03.2012 
23  Josh   05.03.2012  19.03.2012 
23  Laura   19.03.2012  31.12.2012 
22  Ken    01.01.2012  08.03.2012 
22  Rachel   08.03.2012  31.12.2012 
+2

作业?我希望如此 - 当你得到2名同名同学的时候,你已经死了。我建议为人们提供一张单独的桌子(如书本)。 – TomTom

+0

你尝试过什么吗?它是否需要高效,如果是这样,那么你在该表上有哪些索引? – Nanne

+0

请告诉我们你试过的东西。 –

回答

0

这是成功的一半solution.You需要改变这是一个小工作。我不会对你的作业做全部的查询。付出一些努力!

http://sqlfiddle.com/#!3/39d73/17

+0

谢谢,古斯塔夫!我仍然没有想到这一切,但这是一个非常好的开始.. – milo2011

+0

我无法弄清楚其他部分。我已将一个ISNULL添加到ReceivingDate。我一直在尝试修改CASE WHEN ELSE END语句,但无济于事。如果某个人收到它并在不同的年份(比如说2011年)发布它,那么该查询就不会返回相关数据。请帮忙! PS:这不是一项家庭作业。 – milo2011

+0

那么,如果你想检查2011年,那么你需要在表中的一些数据来获得一些在你的查询。如果没有,查询将失败。另一方面,用case/when/else/end。你可以在整个子查询中进行处理。我已经为您添加了哪个部分,因此它只选择日期<01.01.2013 http://sqlfiddle.com/#!3/39d73/21 –

0

表可以加入自

select ex1.BookID,ex1.toPersName,ex1.ExchangeDate as DeliveryDate,Exchanges.ExchangeDate  
as ReceivingDate from Exchanges as ex1 inner join Exchanges on  
ex1.toPersName=Exchanges.FromPersName 
+0

谢谢,Lütfullah! – milo2011

相关问题