如何在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中的业余爱好者
您可以设置一个标志,也可以在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)
的索引。
如何以这种方式更改我的查询,以便只有在@flag> 0 –
@dsfasdfadf的结果时才查询结果。 。 。您将计算该标志,然后添加另一个在where子句中使用它的查询。 –
@dsfasdfadf更新与你需要的问题,因为这是从什么地方开始。 – Paparazzi
假设EMPID是唯一的,您应该只需要做这样的事情。如果它发现记录它将是1,否则它将是0.
DECLARE @FLAG INT
DECLARE @EMPID VARCHAR(10)
SELECT @FLAG = COUNT(*)
FROM EMPLOYEE E
WHERE (E.EMPID = @EMPID)
'但这会导致错误.'不帮助,你有什么错误? –
有这么多问题。你想做什么?因为@flag不是正确的语法 - 这是一个别名。不能通过一组进行计数。退出 - 您在GEO23中的含义是什么?如果你正在搜索一个,你为什么要通过EMPID订购?您可能对SQL不熟悉,但您应该能够写出比现在更好的问题。 – Paparazzi