2012-02-28 74 views
-4

我怎样写SQL语句正确加入我需要你的帮助来获得1行这些语句和多列报表1列和多列

select to_char(SYSDATE, 'MONTH')AS "CURRINT MONTH" from dual; 
SELECT COUNT(PERSON_ID) AS TOTAL_Nsaudi FROM company_person_all 
WHERE (company_person_all.employee_status='Active') AND (company_person_all.citizenship !='SAUDI ARABIA'); 
SELECT COUNT(PERSON_ID) AS TOTAL_Saudi FROM company_person_all 
WHERE (company_person_all.employee_status='Active')AND (company_person_all.citizenship ='SAUDI ARABIA'); 
SELECT COUNT(PERSON_ID) AS Total_All FROM company_person_all 
WHERE ((company_person_all.citizenship !='SAUDI ARABIA'OR company_person_all.citizenship ='SAUDI ARABIA')AND company_person_all.employee_status='Active') 

回答

0

更新:我的答案是仅限MySQL。 OP在评论中提到他正在使用Oracle,所以这对他不起作用。但是我会留下答案,以防其他人发现它对MySQL有用。

您可以根据沙特阿拉伯的公民条件进行分组。像这样:

SELECT COUNT(person_id) AS total, 
    IF(citizenship = 'SAUDI ARABIA', 'yes', 'no') AS is_saudi_arabia 
FROM company_person_all 
WHERE employee_status = 'Active' 
GROUP BY is_saudi_arabia 

这将返回两行;像这样:

+-------+-----------------+ 
+ total + is_saudi_arabia + 
+-------+-----------------+ 
+ 123 + yes    + 
+ 456 + no    + 
+-------+-----------------+ 

然后你可以找到你在服务器端使用的任何语言的值。这里的两个值(123和456)表示前两个查询的结果,并且这两个值的总和表示您上次查询的总数。

+0

感谢奔但我使用pl/sql devolpe工具,仍然给我一些错误,给出了一个缺失experssion – user1237368 2012-02-28 08:31:02

+0

@ user1237368,它给你什么错误? – 2012-02-28 08:33:01

+0

SELECT COUNT(为person_id)为总, IF(company_person_all.citizenship(** = ** 'SAUDI ARABIA'AND!=' 沙特阿拉伯'))AS saudi_arabia FROM company_person_all WHERE company_person_all.employee_status = '主动' GROUP BY saudi_arabia;一颗星给我那里ORA-00936:缺少表达式 – user1237368 2012-02-28 08:44:46

1

类似Ben的答案,但使用非特定供应商的SQL语法:

select count(*), is_saudi_arabia from 
(SELECT case citizenship 
      when 'SAUDI ARABIA' then 'yes' 
      else 'no' 
     end AS is_saudi_arabia 
FROM company_person_all 
WHERE employee_status = 'Active') as sq 
GROUP BY is_saudi_arabia 

编辑:另外,根据您的意见,使用上一行返回了一切:

SELECT to_char(SYSDATE, 'MONTH') AS "CURRENT MONTH", 
     COUNT(CASE WHEN a.citizenship<>'SAUDI ARABIA' THEN 1 END) AS TOTAL_NSaudi, 
     COUNT(CASE WHEN a.citizenship='SAUDI ARABIA' THEN 1 END) AS TOTAL_Saudi, 
     COUNT(*) AS Total_All 
FROM company_person_all a 
JOIN IFSAPP.EMP_EMPLOYED_TIME_ROW t 
    ON a.emp_no = t.emp_no and 
    SYSDATE between t.date_of_employment and t.date_of_leaving 
WHERE a.employee_status = 'Active' 
+0

SELECT SUM(CASE WHEN company_person_all.citizenship <>'SAUDI ARABIA' THEN 1 ELSE 0 END)AS TOTAL_NSaudi, SUM(CASE WHEN company_person_all.citizenship ='SAUDI ARABIA' THEN 1 ELSE 0 END)AS TOTAL_Saudi, SUM(1)Total_All FROM company_person_all WHERE(company_person_all.citizenship!='沙特阿拉伯 OR company_person_all.citizenship ='沙特阿拉伯) AND company_person_all.employee_status = '主动' 但我需要一件事是在这个声明 – user1237368 2012-02-28 13:48:23

+0

@ user1237368添加月份:答案更新。 – 2012-02-28 14:02:58

+0

我需要一件事情,通过提示最终用户从当前月份的“IFSAPP.EMP_EMPLOYED_TIME_ROW” 说唯一在该月的雇员 – user1237368 2012-02-29 06:33:37