需要帮助查询基于SQL Server 2008中的条件

时间:2015-11-25 14:51:52

标签: sql-server-2008

我对SQL Server有疑问。

表:Dimemp

          empkey   |  empid | name |loc
            1      |  100   | abc  |Hyd
            2      |  102   | def  |chen
            3      |  -1    | NA   |beng

表2:dimdept

        deptkey  |  deptno  | deptname
        1        |  10      |Hr
        2        |  20      |ceo
        3        |  -1      |NA

交易表:tranemp

empid    |  deptno   |  projectname |codes
100      |   20      |   test       |100
104      |   10      |   deve       |101
102      |   10      |  test        |107
106      |   40      |   sap        |103
101      |           |  Ca          |100
         |   10      |  manual      |201
100      |   60      |  quality     |100

这里transedmp表数据查看维度表,如果记录匹配精确记录然后检索相应的密钥。如果记录不匹配,那么我们需要为traneemp和维度表填充defaule值-1对应的键值公共列。 empid(tranemp)= dimemp(empid)和tranemp(deptno)= dimdept(deptno)

基于tranemp表我想要输出如下

    empkey   | deptkey    | projectname   | codes
    1        |  2         |   test        |100
    3        |  1         |   deve        |101
    2        |  1         |   test        |107
    3        |  3         |    sap        |103
    3        |  3         |    Ca         |100
    3        |  1         |   manual      |201
    1        |  3         |  quality      |100

我试过这样:

 select 
     a.empkey, b.deptkey, c.projectname, c.codes 
 from  
     traneemp c 
 inner join
     dimemp  a on a.empid = c.empid 
 inner join  
     dimdept b on b.deptno = c.deptno

我无法获得预期的结果。请告诉我如何编写查询以在SQL Server中实现此任务。

1 个答案:

答案 0 :(得分:1)

您可以使用左连接获取所有结果,即使它们不匹配,如果它们为空,也会获得默认值。

select ISNULL(a.empkey, (select empkey from Dimemp where empid = -1)),
       ISNULL(b.deptkey, (select deptkey from dimdept where deptno = -1)), 
       c.projectname, c.codes 
from  traneemp c 
left join dimemp a on a.empid=c.empid
left join dimdept b on b.deptno=c.deptno