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

问题描述:

我获得了员工表,在提供员工ID时选择员工记录,如果员工记录中存在1,则必须启用标志,否则为0。试图使用以下脚本来完成此操作:如何在SQL语句中的select语句中设置标志

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

'但这会导致错误.'不帮助,你有什么错误? –

+0

有这么多问题。你想做什么?因为@flag不是正确的语法 - 这是一个别名。不能通过一组进行计数。退出 - 您在GEO23中的含义是什么?如果你正在搜索一个,你为什么要通过EMPID订购?您可能对SQL不熟悉,但您应该能够写出比现在更好的问题。 – Paparazzi

您可以设置一个标志,也可以在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

假设EMPID是唯一的,您应该只需要做这样的事情。如果它发现记录它将是1,否则它将是0.

DECLARE @FLAG INT 
DECLARE @EMPID VARCHAR(10) 

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