SQL JOIN不适用于相同的数据类型

时间:2015-11-13 10:42:55

标签: sql ms-access-2010

我的表格中包含日期/时间字段( DateSubmitted ), LONG INTEGER 字段(分数)和 TEXT 字段(团队)。

我运行以下查询没有问题( qry_REP_MonthlyReportedFigures ):

SELECT      MONTHNAME(MONTH(DateSubmitted)) AS sMonth,
            YEAR(DateSubmitted) AS lYear,
            COUNT(*) AS CountOfReportedErrors
FROM        tbl_QCErrorLog
WHERE       Team = 'Some Team'
GROUP BY    MONTH(DateSubmitted), YEAR(DateSubmitted)

我也运行此查询没有问题( qry_REP_MonthReportedSeverityTotal ):

SELECT      MONTHNAME(MONTH(DateSubmitted)) AS sMonth,
            YEAR(DateSubmitted) AS lYear,
            SUM(Score) AS SeverityTotal
FROM        tbl_QCErrorLog
WHERE       Team = 'Some Team'
GROUP BY    MONTH(DateSubmitted), YEAR(DateSubmitted)

但是,如果我然后根据这两个查询运行第三个查询,它就不会正确加入它们,我在 ST.sMonth 中得到 #Error 并且空白/ ST.lYear SeverityTotal

中的空值
SELECT      RF.sMonth, 
            RF.lYear, 
            RF.CountOfReportedErrors,
            ST.sMonth,
            ST.lYear,
            ST.SeverityTotal
FROM        qry_REP_MonthlyReportedFigures RF LEFT JOIN qry_REP_MonthReportedSeverityTotal ST
            ON RF.lYear = ST.lYear AND RF.sMonth = ST.sMonth

我希望加入没有问题,因为所有数据类型都相同 - 毕竟它们来自同一个来源。

如果我加入其正常工作的月份,但这会在几年后出现问题,因为我有不同年份同月的数据。如果我在这一年加入,我会再次获得 #Error

现在,如果我更新 qry_REP_MonthReportedSeverityTotal SQL以将月份名称转换为字符串,并将年份转换为长整数,则一切正常:

SELECT      CSTR(MONTHNAME(MONTH(DateSubmitted))) AS sMonth,
            CLNG(YEAR(DateSubmitted)) AS lYear,
            SUM(Score) AS SeverityTotal
FROM        tbl_QCErrorLog
WHERE       Team = 'Some Team'
GROUP BY    MONTH(DateSubmitted), YEAR(DateSubmitted)

所以,虽然我已经解决了这个问题,但有没有人知道为什么原始查询不起作用?

编辑:现在真的很困惑 - 我离开办公室5分钟,回来现在它不起作用,除非我把两个查询都转换为字符串和长整数。

1 个答案:

答案 0 :(得分:1)

为什么qry_REP_MonthlyReportedFigurestbl_QCErrorLog获取数据但qry_REP_MonthReportedSeverityTotaltbl_QC_ErrorLog获取数据?

此查询应该为您提供没有JOIN的预期结果:

SELECT      MONTHNAME(MONTH(DateSubmitted)) AS sMonth,
            YEAR(DateSubmitted) AS lYear,
            COUNT(*) AS CountOfReportedErrors
            SUM(Score) AS SeverityTotal
FROM        tbl_QCErrorLog
WHERE       Team = 'Some Team'
GROUP BY    MONTH(DateSubmitted), YEAR(DateSubmitted)