我对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中实现此任务。
答案 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