2013-01-16 37 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

相關問題