SQL-запрос полного соединения - PullRequest
1 голос
/ 14 ноября 2011

У меня есть запрос sql полного соединения, и я получаю данные из той же таблицы. Проблема в том, что я получаю нулевое значение, когда ожидаю имя столбца.

Пример: У меня есть таблица, где есть два столбца typeOfPost, dob.

DOB               TypeOfPost
---------      --------------
20/11/1998      Manager
1/1/2000         Sales
13/6/1999         Manager
20/1/1987         Manager
1/11/1985         Sales

Теперь, когда я пишу запрос на соединение, как

select DATENAME(month,dob) as Red,count(TypeOfPost) 
from tablename
where TypeOfPost='Manager'
group by DATENAME(month,dob) as A



full join

select DATENAME(month,dob) as Green,count(TypeOfPost) 
from tablename
where TypeOfPost='Sales'
group by DATENAME(month,dob) as B on B.Green = A.Red



Output--                                                Expected Output--
---------------------                           ---------------------
Month      Man      Sal                           Month      Man      Sal
--------   -----   ------                        --------   -----   ------
January      1         1                              January      1         1
NULL         1         NULL                           June         1         NULL
November   1         1                              November   1         1

Теперь проблема возрастает, я хочу, чтобы в столбце «Месяц» вместо «NULL» было указано «Июнь». Так есть ли способ получить это ?? Помоги мне. Спасибо.

1 Ответ

1 голос
/ 14 ноября 2011

Один из вариантов -

  • использовать оператор CASE в подвыборке
  • Определить для данной записи, является ли менеджер или менеджер по продажам
  • заменой на1 или 0 соответственно
  • SELECT и GROUP из этого подпункта выберите окончательные результаты.

Оператор SQL

SELECT  Month
        , SUM(Man) AS Man
        , SUM(Sal) AS Sal
FROM    (        
          SELECT  DATENAME(MONTH, DOB) AS Month
                  , CASE WHEN TypeOfPost = 'Manager' THEN 1 ELSE 0 END AS Man
                  , CASE WHEN TypeOfPost = 'Sales' THEN 1 ELSE 0 END AS Sal
          FROM    tableName
        ) g          
GROUP BY
        Month        

или

SELECT  Month
        , SUM(Man)
        , SUM(Sal)
FROM    (        
          SELECT  DATENAME(MONTH, DOB) AS Month
                  , COUNT(TypeOfPost) AS Man
                  , 0 AS Sal
          FROM    tableName
          WHERE   TypeOfPost = 'Manager'
          GROUP BY
                  DATENAME(MONTH, DOB)
          UNION ALL         
          SELECT  DATENAME(MONTH, DOB) AS Month
                  , 0 AS Man
                  , COUNT(TypeOfPost) AS Sal
          FROM    tableName
          WHERE   TypeOfPost = 'Sales'
          GROUP BY
                  DATENAME(MONTH, DOB)
        ) g
GROUP BY
        Month        
...