1行和多列中的语句

时间:2012-02-28 08:00:19

标签: sql

如何编写SQL语句以正确连接我需要您的帮助才能将这些语句分为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')

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

更新:我的答案仅适用于MySQL。评论中提到他正在使用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)代表前两个查询的结果,这两个值的总和代表您上次查询的总和。