如何编写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')
答案 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)代表前两个查询的结果,这两个值的总和代表您上次查询的总和。