2016-10-28 56 views
0

我正在使用SQL Server數據庫,並選擇記錄以顯示合同信息。該協議可以是活動的,不活動的,等待響應或等待付款。ORDER BY查詢拋出錯誤

我的用戶希望網格顯示順序的結果:

  • 等待回覆
  • 等待付款
  • 逾期
  • 活動
  • 無效

我試圖使用下面的代碼來實現這一目標,但它很糟糕ws錯誤說在單詞默認附近的語法錯誤。

通過聲明的順序有什麼問題?

Try 
    sql = "SELECT ContractID, CustAcc, DateStart, DateRenew, Fee, Agreement, OtherDetails, " _ 
     & "DateSent, TimeSent, ReminderName, ReminderEmail FROM dbo.tblContracts " _ 
     & "ORDER BY FIELD(Agreement, 'AWAITING RESPONSE', 'AWAITING PAYMENT', 'ACTIVE', 'INACTIVE')" 
    conAd = New OleDb.OleDbDataAdapter(sql, con) 
    conset = New DataSet 
    conAd.Fill(conset) 
    ugModules.DataSource = conset 
Catch ex As Exception 
    errorLog(ex.Message, ex.StackTrace) 
    MsgBox("Failed to retrieve contract information, refer to error log") 
End Try 

編輯

改變我的代碼按從@Solarflare的建議後,我現在已經得到了下面的代碼;

sql = "SELECT ContractID, CustAcc, DateStart, DateRenew, Fee, Agreement, OtherDetails, " _ 
& "DateSent, TimeSent, ReminderName, ReminderEmail FROM dbo.tblContracts " _ 
& "ORDER BY CASE Agreement WHEN 'AWAITING RESPONSE' THEN 1 WHEN 'AWAITING PAYMENT' THEN 2 " _ 
& "WHEN 'OVERDUE' THEN 3 WHEN 'ACTIVE' THEN 4 WHEN 'INACTIVE' THEN 5 END" 

但是,結果並不如預期。其結果如下

所以INACTIVE主要位於頂部,其次是AWAITING RESPONSE和INACTIVE等的混合 - 爲什麼會這樣呢?

+0

什麼類型的SQL? – Santi

+0

什麼數據類型是'Agreement'?它看起來像你正試圖將它(或什麼)翻譯成該文本?也。 「默認」是不是在SQL中,所以它不清楚錯誤實際上是從該片段 – Plutonix

+3

這看起來像你試圖在mssql服務器上使用mysql函數。看看[什麼是MS SQL Server功能類似於MySQL的FIELD()函數?](http://stackoverflow.com/questions/3892406/what-is-the-ms-sql-server-capability-similar mysql-field-function) – Solarflare

回答

0

ORDER BY應該在SQL Server中使用CASE語句。