我有两个表,一个具有事实数据(表1),另一个是具有第一个表的值的维(维度)。 维度表使用null作为通用值。
我知道我可以使用临时表和两个更新来进行“加入”,但是我认为必须有更好的方法。 我该如何加入?
谢谢
Table1: Dimension:
Col1: Code1 Code2: Code1: Code2: Value
a 1 12 1 12 5
b 1 15 1 15 6
c 1 16 1 16 7
d 1 17 1 <null> 9
e 1 20
ResultTable
Col1: Code1 Code2 Value
a 1 12 5
b 1 15 6
c 1 16 7
d 1 17 9
e 1 20 9
答案 0 :(得分:2)
您需要一个默认值。您可以使用两个left join
:
select a.*, coalesce(b.value, bdefault.value) as value
from a left join
b
on a.code2 = b.code2 left join
b bdefault
on bdefault.code2 is null;
另一种有趣的方法使用outer apply
:
select a.*, b.value
from a outer apply
(select top (1) b.value
from b
where b.code2 = a.code2 or b.code2 is null
order by (case when b.code2 is not null then 1 else 2 end)
) b;
答案 1 :(得分:-1)
简化表格,这是一种方法,请在SQL Fiddle进行检查
MS SQL Server 2017架构设置:
create table a ( i int, a varchar(100) );
create table b ( i int );
insert into a values
(1, 'A'),
(2, 'B'),
(Null, 'Generic');
insert into b values
(1),
(2),
(3),
(4);
查询:
with no_corresponding as
( select b.*
from b left outer join a on a.i = b.i
where a.i is null
)
select a.*, b.*
from a inner join b on a.i = b.i
union all
select a.*, no_corresponding.*
from no_corresponding cross join a
where a.i is null
Results :
| i | a | i |
|--------|---------|---|
| 1 | A | 1 |
| 2 | B | 2 |
| (null) | Generic | 3 |
| (null) | Generic | 4 |