正确连接两个表的麻烦

时间:2015-03-27 11:00:37

标签: sql sql-server-2008

我有一张包含汽车里程数据的表格,该表格的选择如下:

enter image description here

每辆车每月给出现有价值。我现在遇到的问题是我需要每个月都有一排车。现在它只显示一个汽车排,如果汽车在上个月有里程数。我想要它,以便汽车每个月都有一行,当前数据或只有NULL值。

要做到这一点,我已经制作了一个每月带有车ID的列表,下面是代码和它的外观。

,   carMonthList as (
SELECT
    M.MonthDate
,   difflist.FK_CarID as fkc
FROM
    carMKcombiDiffList as difflist cross join
    MonthList M 
)

他为一个月的汽车连续做了几个小时的问题。

enter image description here

然后我尝试使用UNION将表格与汽车数据和表格与汽车每月数据相结合。以下是代码和示例结果:

,   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月看到这一点,它有两行,每一行都有一行。我无法通过检查两个日期来过滤它们,因为它会删除所有空日期。如何/我应该如何解决这个问题,同时保持每个月的行与汽车数据的NULL值? enter image description here

1 个答案:

答案 0 :(得分:2)

基于Arvo的建议

这是一个SQLFiddle工作示例