2012-09-26 61 views
3

假設我們有一個Emp表和EmpId, Manager, Subb三列。將來自同一個表的兩條SELECT語句與diff結合起來。條件

Manager是1時EmpId是經理,類似地subb

需要表中管理器和子表的編號。

我們可以將這兩個查詢合併爲一個SELECT查詢嗎? (要掃描的表只有一次)

select count(*) as ManagerNumber from Emp where Manager=1 
select count(*) as Subordinate from Emp where Subb=1. 

回答

9

你可以這樣做:

SELECT 
    SUM(CASE WHEN Manager = 1 THEN 1 ELSE 0 END) AS ManagerNumber, 
    SUM(CASE WHEN subb = 1 THEN 1 ELSE 0 END) AS Subordinate 
FROM Emp 

它是SQL的ANSI標準,它將在各種RDBMS工作。

+0

謝謝賈邁勒:您的查詢退出是正確的,你只需要用NULL替換0。由於count會計算所有的值是否爲0或1,但是當它爲null時則不會計數。 SELECT COUNT (CASE WHEN經理= 1 THEN 1 ELSE空END)AS ManagerNumber, COUNT(CASE WHEN SUBB = 1 THEN 1 ELSE空END)作爲輔助 FROM EMP –

+0

@a_horse_with_no_name對不起現在固定 –

0

是的,你可以。

select 
    (select count(*) as ManagerNumber from Emp where Manager=1), 
    (select count(*) as Subordinate from Emp where Subb=1) 

或各成一排,

select count(*) as ManagerNumber from Emp where Manager=1 
UNION 
    select count(*) as Subordinate from Emp where Subb=1 
+0

這兩個語句仍然會掃描表格兩次,這是Anand不想要的 –

+0

想要掃描表Emp只需一次。 –

+0

哦,我不明白這個問題! –

相關問題