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

问题描述 投票:0回答:2

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

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

sql sql-server case flags
2个回答
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
投票

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

DECLARE @FLAG INT
DECLARE @EMPID VARCHAR(10)

SELECT @FLAG = COUNT(*)
FROM EMPLOYEE E
WHERE (E.EMPID = @EMPID)
© www.soinside.com 2019 - 2024. All rights reserved.