见下文我没有得到每个统计数据的行
这个左连接就像一个内连接
我得到6行,期待9个
我希望每个名称有3行(如果没有匹配则为空数据)
如何解决这个问题?
declare @table table (name varchar(10), status int, data int);
insert into @table values
('a', 1, 2)
, ('a', 2, 5)
, ('a', 3, 7)
, ('b', 1, 5)
, ('b', 2, 6)
, ('c', 1, 3)
select stats.status as statusStats
, t.status as statusData, t.name, t.data
from (values (1),(2),(3)) as stats(status)
left join @table t
on t.status = stats.status
期望的输出
('a', 1, 2)
, ('a', 2, 5)
, ('a', 3, 7)
, ('b', 1, 5)
, ('b', 2, 6)
, ('b', 3, null)
, ('c', 1, 3)
, ('c', 2, null)
, ('c', 3, null)
答案 0 :(得分:3)
您可能期望name
和status
值之间的笛卡尔积。好吧,运气不好 - SQL无法“猜测”这个,你必须手动引入乘法:
select stats.status as statusStats, t.status as statusData, t.name, t.data
from (values (1),(2),(3)) stats(status)
cross join (values ('a'),('b'),('c')) names(name)
left join @table t
on t.status = stats.status
and t.name = names.name;