2010-06-16 121 views
1

我使用的是SQL-SERVER 2005TSQL幫助與簡單的查詢

我有兩個表,你可以在圖中,CellularUsers和CellularPayments看到。我需要得到誰需要用戶進行時,有一些規則收取:

  1. 如果用戶ID的最後CellularPayments.paymentSum爲8,然後選擇所有 用戶ID和userCellularNumbers其中 CellularPayments.date> GETDATE()
  2. 如果用戶ID的最後CellularPayments.paymentSum爲18然後選擇所有 用戶ID和userCellularNumbers其中 DATEADD(DD,7,CellularPayments.date)> GETDATE()

alt text http://img256.imageshack.us/img256/1946/63468037.png

預覽圖click here

我怎麼做是正確的,現在但它不會吧?如果我正確地按照你的邏輯看起來我提前

回答

1

select cu.userID,cu.userCellularNumber from CellularUsers cu 
left join CellularPayments cp 
on cu.userID=cp.userID 
where cu.isPaymentRecurring=1 
and isActivated=1 
and cp.paymentID in (select max(paymentID) from CellularPayments group by userID) 

感謝,在where子句中應添加以下AND語句:

and dateadd(dd 
      ,case cp.PaymentSum 
       when 8 then 0 
       when 18 then 7 
       else [AppropriateDefaultValue] 
      end 
      ,CellularPayments.date) > getdate() 

(我也讓它成爲內連接)

+0

好的!真的需要開始在這種情況下使用案例,嘿... – eugeneK 2010-06-17 06:18:47

+0

他們可以讓驚人的靈活性。 (感謝他們的讚揚,他們將我帶到了用戶頁面#42 [2010年6月17日],這應該是一個SO贏的條件!) – 2010-06-17 14:04:45