我很抱歉,如果已经在这里得到了解答,但我找不到任何有关我具体问题的信息。
我有几年和几个月的时间序列,以及许多物种的生物量的时间序列数据。我需要将15个特定物种的时间序列分开。不幸的是,如果在一个月内没有遇到某个物种的个体,则没有输入数据,在我的时间序列中留下应该有0的空白。为了解决这个问题,我试图将物种数据(右手表)加入一个完整的时间序列(左手表)。不幸的是,我的输出连接仍然缺少没有数据的月份。例如,我错过了1986年的第1个月,因为那个月我的右手表中没有数据。我认为左连接应该包含那些行,但是将右侧列留空。
我的代码如下。任何你能建议的东西都会受到赞赏。谢谢!
Species1<-sqldf("SELECT TimeSeries.StartYear, TimeSeries.StartMonthNo, CommonName, EstimatedBiomassg, ScaledProportionofDominantNektonBiomass
FROM TimeSeries
LEFT OUTER JOIN TrawlBiomassbyMonth
ON TimeSeries.StartYear = TrawlBiomassbyMonth.StartYear
AND TimeSeries.StartMonthNo = TrawlBiomassbyMonth.StartMonthNo
WHERE CommonName = 'White shrimp'
AND RegionCode = 1")
修改
很抱歉回答我自己,但我想出了如何做到这一点,我想把它留下来以防其他人遇到同样的问题。问题在于WHERE参数限制了最终输出,而不仅仅是右手表被输入到连接中。我使用的代码如下。
Species1<-sqldf("SELECT StartYear, StartMonthNo, RegionCode, CommonName, EstimatedBiomassg, ScaledProportionofDominantNektonBiomass
FROM TrawlBiomassbyMonth
WHERE CommonName='White shrimp'
AND RegionCode=1")
Species1TimeSeries<-sqldf("SELECT TimeSeries.StartYear, TimeSeries.StartMonthNo, CommonName, EstimatedBiomassg, ScaledProportionofDominantNektonBiomass
FROM TimeSeries
LEFT JOIN Species1
ON TimeSeries.StartYear = Species1.StartYear
AND TimeSeries.StartMonthNo = Species1.StartMonthNo")
答案 0 :(得分:0)
您可以尝试以下sql查询吗?
SELECT TimeSeries.StartYear, TimeSeries.StartMonthNo, CommonName, EstimatedBiomassg, ScaledProportionofDominantNektonBiomass
FROM TimeSeries
LEFT JOIN TrawlBiomassbyMonth
ON TimeSeries.StartYear = TrawlBiomassbyMonth.StartYear
AND TimeSeries.StartMonthNo = TrawlBiomassbyMonth.StartMonthNo
WHERE CommonName = 'White shrimp'
AND RegionCode = 1")
从阅读您的帖子,问题是右侧表中有一些NULL字段,您希望包括左表中的所有行,即使没有匹配?
您可以设置一个http://sqlfiddle.com/吗? PS由于我的stackoverflow代表我无法评论,所以虽然这不是一个答案,我正在努力帮助