SQL Server完全连接查询

时间:2011-11-14 06:59:53

标签: sql sql-server join null

我有一个完整的连接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

现在这里的问题出现了,我希望在Month列中的'June'而不是NULL值。 那有什么办法可以搞定吗? 帮帮我。 感谢。

1 个答案:

答案 0 :(得分:1)

一种选择是

  • 在子选择中使用CASE语句
  • 确定给定记录,如果是经理或销售
  • 相应地用1或0代替
  • SELECTGROUP从此子集中选择最终结果。

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