2014-09-10 2 views
-3

Я очень новичок в SQL и не понимаю, почему этот запрос не работает. Я надеялся, что кто-то может дать мне руку. Заранее спасибо.Новые запросы SQL

SELECT COUNT (Results.Output) 
FROM RESULTS 
WHERE Results.Output <> 'Simulated' AND Results.Output <> '-' AND 
     Results.Det = 'ASBACM_SZ OR Results.Det = 'ASBACM AND Result.Detdate >= ? 
     AND Result.Detdate <= ? 
+0

Просьба опубликовать также Whats ошибка SQL при выполнении этого запроса. – XxXk5XxX

+3

«* не работает *» не является допустимым сообщением об ошибке в любой СУБД, которую я знаю. Пожалуйста, добавьте ** точное сообщение об ошибке **. И вы также должны указать, какую СУБД вы используете (Postgres? Oracle?). –

+2

@a_horse_with_no_name это новая функция SQL Server 2014 Enterprise. Вы можете «УСТАНОВИТЬ OBFUSCATED_ERR_MSGS ON», чтобы вы не выдавали никаких сведений о безопасности, предоставляя в своем сообщении об ошибке значимую информацию. ;) – DeanOC

ответ

2

Попробуйте добавить некоторые скобки и добавить недостающие цитаты:

SELECT COUNT(Results.[Output]) FROM Results 
WHERE Results.[Output] <> 'Simulated' 
    AND Results.[Output] <> '-' 
    AND (
     Results.Det = 'ASBACM_SZ' 
      OR 
     Results.Det = 'ASBACM' 
    ) 
    AND Result.Detdate >= ? 
    AND Result.Detdate <= ? 
+0

Кроме того, если вы действительно новичок в SQL, вам нужно изменить значение '?' на конкретную дату для этого, чтобы он мог работать. Но если вы используете этот запрос на каком-то языке программирования, «?» это параметр, который является еще одной темой, которую, как мне кажется, вам нужно знать. – jomsk1e

+0

Здравствуйте, Спасибо за помощь. Ошибка, которую я получаю, - «Расположение ошибки в инструкции SQL: 15 [Выражение парсинга (столбец 1 в предложении SELECT)] – Aaron

+0

Я обновил свой ответ. Причина ошибки заключается в том, что' OUTPUT' является зарезервированным ключевое слово в Advantage. Не могли бы вы добавить тег 'advantage-database-server' на ваш вопрос? –

1

Одинарные кавычки должны быть закрыты (вы пропустили несколько закрывающих кавычек) и операторы часто должны быть сгруппированы, когда у вас есть сочетание «и» и «или».

Вы можете попробовать это:

select count (*) 
from results 
where results.[output] <> 'Simulated' 
    and results.[output] <> '-' 
    and (results.det = 'ASBACM_SZ' or results.det = 'ASBACM') --group the 'or' 
    and result.detdate >= 'somedate' 
    and result.detdate <= 'otherdate' 

Сокращенная форма:

select count (*) 
from results 
where results.[output] not in ('Simulated', '-') 
    and results.det in ('ASBACM_SZ', 'ASBACM') 
    and result.detdate between 'somedate' and 'otherdate' 
+1

' [output] 'не является юридическим идентификатором в стандартном SQL, и мы еще не знаем, какую СУБД Aaron использует. –

+0

Извините, я использую базу данных Advantage – Aaron

Смежные вопросы