如何在SQL语句的select语句中设置标志

时间:2015-07-19 13:20:24

标签: sql sql-server case flags

我有Employee表,我在提供员工ID时选择员工记录,如果员工记录存在,我必须启用一个标志,否则为0.我试图使用以下脚本完成此操作:< / p>

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的业余爱好者

2 个答案:

答案 0 :(得分: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)上的索引。

答案 1 :(得分:0)

假设EMPID是唯一的,您应该只需要做这样的事情。如果找到记录则为1,否则为0。

DECLARE @FLAG INT
DECLARE @EMPID VARCHAR(10)

SELECT @FLAG = COUNT(*)
FROM EMPLOYEE E
WHERE (E.EMPID = @EMPID)