当左列不与右列一起出现时交叉应用/连接两列

Cross apply / Joining two column when left column does not appear with right column

假设我有以下 table:

我们可以看到第 1 个月没有供应金枪鱼。 我想让它也出现在第 1 个月。

我怎样才能做到这一点?

谢谢!

你可以用cross apply每个月给每一种食物。这似乎是你想要的。

declare @table table (Food varchar(16), [Month] int)
insert into @table
values
('Pizza',1),
('Burgers',1),
('Salad',1),
('Tuna',2),
('Pizza',2),
('Burgers',2),
('Salad',2)

select distinct
    f.Food
    ,m.Month
from @table f
cross apply (select distinct [Month] from @table) m
order by m.Month

要找出 Tuna 月份未提供服务...

select distinct [MONTH]
from @table
where [Month] not in (select [Month] from @table where Food = 'Tuna')

据我了解,问题是您 table 没有某种食物的月份记录。 对我来说,最好的方法是创建一个 table "month_of_year",它只包含从 1 到 12 的数字。

然后:

select 不同的食物 进入#tmp 来自 your_table

select a.Food, month_of_year.month 来自 #tmp 交叉连接 month_of_year

下降 table #tmp

然后,例如,如果你想查看一年中的食物总数,请从我写的最后一个 table 的左边开始,用总和的 table ,你将有所有 food/month 与总数,如果没有提供食物的总数为空

如果您需要更多信息,请询问 =)

您可以尝试使用 DISTINCTCROSS JOIN

两个子查询
SELECT *
FROM (SELECT DISTINCT Food FROM T) t1
CROSS JOIN (SELECT DISTINCT [Month] FROM T) t2

sqlfiddle