2015-11-06 120 views
1

新到SQL,使用MS SQL Sever的管理工作室AdventureWorks示例數據庫:如何將兩個select語句組合成一個表,並使用兩個獨立的列?

http://elsasoft.com/samples/sqlserver_adventureworks/sqlserver.spring.katmai.adventureworks/default.htm

試圖在兩個SELECT報表每個包含男女員工的COUNT結合起來。 我可以使用UNION ALL將兩個計數返回到同一個表上的兩行。

SELECT COUNT(HumanResources.Employee.Gender) AS 'Male Employees' 
FROM HumanResources.Employee 
WHERE Employee.Gender = 'M' 
UNION ALL 
SELECT COUNT(HumanResources.Employee.Gender) AS 'Female Employees' 
FROM HumanResources.Employee 
WHERE Employee.Gender = 'F'; 

但是我試圖讓每個M/F的COUNT在兩個單獨的列。管理得到兩個單獨的列出現,但計數不存在。

SELECT Set1.[Male Employees], Set2.[Female Employees] 
FROM 
( 
    SELECT COUNT(Employee.Gender) AS 'Male Employees' 
    FROM HumanResources.Employee 
    WHERE Employee.Gender = 'M' 
    ) as Set1 
INNER JOIN 
(
    SELECT COUNT(Employee.Gender) AS 'Female Employees' 
    FROM HumanResources.Employee 
    WHERE Employee.Gender = 'F' 
) as Set2 
on Set1.[Male Employees] = Set2.[Female Employees] 

我覺得我失去了一些東西明顯..

回答

2

您可以有條件聚集做到這一點:

SELECT SUM(CASE WHEN Employee.Gender = 'M' THEN 1 ELSE 0 END) AS 'Male Employees', 
     SUM(CASE WHEN Employee.Gender = 'F' THEN 1 ELSE 0 END) AS 'Female Employees' 
FROM HumanResources.Employee 

但你可以做到這一點野蠻,也直白道:

SELECT (SELECT COUNT(HumanResources.Employee.Gender) 
     FROM HumanResources.Employee 
     WHERE Employee.Gender = 'M') AS 'Male Employees', 
     (SELECT COUNT(HumanResources.Employee.Gender) 
     FROM HumanResources.Employee 
     WHERE Employee.Gender = 'F') AS 'Female Employees' 

第一種方法當然是優選的方式。

+0

我看,看起來比使用'INNER JOIN'更有效率 – girthquake