2015-07-19 89 views
0

我獲得了員工表,在提供員工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

回答

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)