2012-02-28 3 views
-4

Как написать заявление SQL правильно присоединиться к мне нужна ваша помощь, чтобы получить эти заявления в 1 ряд и мульти-Columnsзаявления в 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

Update: Мой ответ на Только 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 и все еще даю мне некоторую ошибку, указав, что там отсутствует пропуски – user1237368

+0

@ user1237368, что это за ошибка? –

+0

SELECT COUNT (person_id) AS Всего IF (company_person_all.citizenship (** = ** 'SAUDI ARABIA'AND! =' Саудовскую Аравию ')) КАК saudi_arabia ОТ company_person_all WHERE company_person_all.employee_status = 'Активные' GROUP BY saudi_arabia; одни звезды дают мне ORA-00936: отсутствует выражение – user1237368

1

Подобный ответ Бена, но с использованием не конкретного производителя 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 

EDIT: Кроме того, на основе ваших комментариев, вернуть все на одной линии с помощью:

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 <> 'Саудовской Аравией' THEN 1 ELSE 0 END) AS TOTAL_NSaudi, SUM (CASE WHEN company_person_all.citizenship = 'Саудовскую Аравию' ТОГДА 1 0 КОНЕЦ ИНАЧЕ) КАК TOTAL_Saudi, СУММА (1) КАК Total_All ОТ company_person_all ГДЕ (company_person_all.citizenship! = '' Саудовскую Аравию ИЛИ company_person_all.citizenship = 'САУДОВСКАЯ АРАВИЯ') И company_person_all.employee_status = 'Активный' , но мне нужно еще одно - добавить месяц на это утверждение – user1237368

+0

@ user1237368: ответ обновлен. –

+0

Мне нужна еще одна вещь, чтобы отслеживать работу в текущем месяце, давая подсказку для конечного пользователя из «IFSAPP.EMP_EMPLOYED_TIME_ROW» говорят, что единственный сотрудник в этом месяце – user1237368

Смежные вопросы