当左列不出现在右列时交叉应用/合并两列

时间:2018-11-06 15:16:59

标签: sql sql-server join ssms cross-apply

想象一下,我有下表:

Food served per month

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

Food server per month goal

我该如何实现?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以尝试对DISTINCTCROSS JOIN使用两个子查询

SELECT *
FROM (SELECT DISTINCT Food FROM T) t1
CROSS JOIN (SELECT DISTINCT [Month] FROM T) t2

sqlfiddle

答案 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')

答案 2 :(得分:0)

据我了解,问题在于您有一张桌子,上面没有某种食物的月份记录。 对我来说,最好的方法是创建一个表“ month_of_year”,该表仅包含1到12之间的数字。

然后:

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

选择食品,month_of_year.month    从#tmp交叉加入month_of_year

删除表#tmp

然后,例如,如果您要查看当年的食物总量,请从我写的最后一张表的总和表中向左走,然后将获得所有食物/月的总数和在未提供食物的情况下总计为

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