我创建了3个相同列的视图 - 数量,年份和品种。我想在年份和品种上加入所有三个表格,以便对数量进行一些计算。
问题是每个视图都不会出现特定的年份/品种组合。
我尝试了类似的查询:
SELECT
*
FROM
a
left outer join
b
on a.variety = b.variety
left outer join
c
on a.variety = c.variety or b.variety = c.variety
WHERE
a.year = '2015'
and b.year = '2015'
and a.year= '2015'
显然这不是正确的解决方案。理想情况下,我想加入年份和品种,而不是使用where声明。
无论表格上的空值如何,所需的输出都会将所有匹配年份和品种的数量放在同一行上。
非常感谢帮助,谢谢。
答案 0 :(得分:1)
你想要一个完整的外连接,而不是左连接,如下所示:
Select coalesce(a.year, b.year, c.year) as Year
, coalesce(a.variety, b.variety, c.variety) as Variety
, a.Quantity, b.Quantity, c.Quantity
from tableA a
full outer join tableB b
on a.variety = b.variety
and a.year = b.year
full outer join tableC c
on isnull(a.variety, b.variety) = c.variety
and isnull(a.year, b.year) = c.year
where coalesce(a.year, b.year, c.year) = 2015
您正在使用的左连接不会从b或c中选取不在a中的值。此外,您的where子句正在删除所有三个表中没有值的行(因为这些行中的年份为null,不等于2015)。无论另一个表是否包含匹配项,完整外部联接将从联接中的任一表中获取行。