Sql 无法正确连接两个表
我有一个包含汽车里程数据的表格,该表格的选择如下所示: 它给出了每辆车每月的现有值。我现在的问题是,我需要它每个月都有一辆车。现在,它只显示了一个汽车排,如果汽车在该月有里程数。我希望它能让一辆车每个月都有一行,有当前数据或者只有空值 为了做到这一点,我列出了一个每月的汽车ID清单,下面是它的代码以及它的外观Sql 无法正确连接两个表,sql,sql-server-2008,Sql,Sql Server 2008,我有一个包含汽车里程数据的表格,该表格的选择如下所示: 它给出了每辆车每月的现有值。我现在的问题是,我需要它每个月都有一辆车。现在,它只显示了一个汽车排,如果汽车在该月有里程数。我希望它能让一辆车每个月都有一行,有当前数据或者只有空值 为了做到这一点,我列出了一个每月的汽车ID清单,下面是它的代码以及它的外观 , carMonthList as ( SELECT M.MonthDate , difflist.FK_CarID as fkc FROM carMKcombi
, carMonthList as (
SELECT
M.MonthDate
, difflist.FK_CarID as fkc
FROM
carMKcombiDiffList as difflist cross join
MonthList M
)
一个小问题,他为一辆汽车连续一个月出(数月)次
然后我尝试使用UNION将表与car数据以及表与每月car数据结合起来。下面是代码和示例结果:
, fullList as (
SELECT
CMlist.MonthDate
, CMlist.fkc as CarID
, NULL as beginMonth
, NULL as KM
, NULL as diff
, NULL as CO2
FROM
carMonthList as CMlist
UNION
SELECT
diffList.beginMonth
, diffList.FK_CarID as CarID
, diffList.beginMonth
, diffList.KM
, diffList.diff
, diffList.CO2
FROM
carMKcombiDiffList as diffList
)
这里的问题是,在存在数据的一个月内,他做了两行。您可以在05月份看到这一点,它有两行,一行代表联合体的每一侧。我不能通过检查这两个日期来过滤掉它们,因为这会删除所有的空日期。我如何/应该解决这个问题,同时将每月的行保留为车辆数据的空值?
基于Arvo的建议
下面是一个工作示例我将缩短数据集并更新pics,用于1个护理最安全的方法是创建月表,交叉连接到cars表,并将您的汽车月数据左连接到这些表-这样您就有了每辆汽车和每个月的可用记录。我这样做了,但我没有每个汽车的每月行。只有当那个月有汽车数据时,就像你做了一个内部连接,而不是外部连接,我会重新生成我的旧代码并再次测试,如果失败,我会报告。