2015-07-19 3 views
0

У меня есть таблица Employee, в которой я выбираю записи сотрудников, когда указан идентификатор сотрудника, с которым я должен включить флаг, если запись сотрудника существует с 1 в противном случае 0. I Я пытаюсь выполнить это, используя следующий сценарий:Как установить флаг в операторе select в операторе SQL

DECLARE @FLAG INT 
DECLARE @EMPID VARCHAR(10) 

SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS @FLAG, 
     E.EMPID, 
     E.EMPNAME, 
     E.DESIGNATION 
FROM 
    EMPLOYEE E LEFT JOIN 
    GEO23.EMPLOYEEDETAILS ED ON E.EMPID = ED.EMPID 
WHERE E.EMPID = @EMPID 
ORDER BY E.EMPID DESC 

Но это приводит к ошибке. Может кто-нибудь, пожалуйста, помогите. Обратите внимание, что я любитель в SQL

+1

'Но это приводит к ошибке.' Does not help, какая у вас ошибка? –

+0

У этого так много проблем. Что ты пытаешься сделать? поскольку @flag не является надлежащим синтаксисом - это псевдоним. Не может быть счет с группой. Выходы, где - вы имеете в виду в GEO23? Зачем вам заказывать EMPID, если вы ищете по одному. Возможно, вы новичок в SQL, но теперь вы можете написать более качественный вопрос. – Paparazzi

ответ

1

Вы можете установить флаг или вы можете вернуть результаты SQL Server, но не оба. Таким образом, синтаксис, который работает для запроса вы написали:

SELECT @FLAG = (CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END) 
FROM EMPLOYEE E LEFT JOIN 
    GEO23.EMPLOYEEDETAILS ED 
    ON E.EMPID = ED.EMPID 
WHERE (E.EMPID = @EMPID) 
ORDER BY E.EMPID DESC; 

Я оставил запрос, как вы написали, но она имеет множество проблем:

  • order by ненужно, потому что она возвращает только один ряд.
  • left join не требуется, поскольку он хранит все строки в первой таблице, и вы используете только count().

Таким образом, эквивалентная версия:

SELECT @FLAG = (CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END) 
FROM EMPLOYEE E 
WHERE E.EMPID = @EMPID; 

Для этого запроса, я рекомендовал бы индекс по employee(empid).

+0

Как я могу изменить свой запрос таким образом, что я запрашиваю результат, только если результат этого @flag> 0 –

+0

@dsfasdfadf. , , Вы должны вычислить флаг, а затем добавить другой запрос, который использует его в разделе 'where'. –

+0

@dsfasdfadf Обновите вопрос тем, что вам нужно, поскольку это нечто отличное от того, где это началось. – Paparazzi

0

Предполагая, что EMPID уникален, вам просто нужно сделать что-то подобное. Если он найдет запись, он будет равен 1, в противном случае это будет 0.

DECLARE @FLAG INT 
DECLARE @EMPID VARCHAR(10) 

SELECT @FLAG = COUNT(*) 
FROM EMPLOYEE E 
WHERE (E.EMPID = @EMPID) 
Смежные вопросы