2016-10-28 1 views
0

Я использую базу данных SQL Server и выбираю записи для отображения информации о контракте. Соглашение может быть активным, неактивным, ожидающим ответа или ожидающим платежа.Ошибка запроса запроса ORDER BY

Мой пользователь хочет сетки для отображения результатов в следующем порядке:

  • В ожидании ответа
  • Ожидает оплаты
  • Просроченная
  • Активный
  • Неактивный

Я пытаясь использовать следующий код для достижения этого, но это ws ошибка, говорящая о синтаксической ошибке рядом со словом default.

Что не так с порядком по заявлению?

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 

EDIT

После изменения моего кода в соответствии с предложением от @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

Какой тип данных является «Соглашением»? Похоже, вы пытаетесь перевести его (или что-то) на этот текст? Также. «По умолчанию» isnt в SQL, поэтому его непонятная ошибка на самом деле из этого фрагмента – Plutonix

+3

Похоже, вы пытаетесь использовать функцию mysql на сервере mssql. Взгляните на [Что такое возможность MS SQL Server, аналогичная функции MySQL FIELD()?] (Http://stackoverflow.com/questions/3892406/what-is-the-ms-sql-server-capability-similar -to-the-mysql-field-function) – Solarflare

ответ

0

ORDER BY должен использовать оператор CASE в SQL Server.