SQL JOIN 不适用于相同的数据类型
SQL JOIN not working on same data types
我有一个 table 包含一个 DATE/TIME 字段(DateSubmitted),一个 LONG INTEGER 字段(Score)和一个 TEXT 字段(Team)。
我运行以下查询没有问题(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)
但是,如果我然后 运行 基于这两个查询的第三个查询它没有正确加入它们并且我在 [=33= 中得到 #Error ]ST.sMonth 和 blanks/nulls 在 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 分钟,然后回来,现在它不起作用,除非我将查询都转换为字符串和长整数。
为什么 qry_REP_MonthlyReportedFigures
从 tbl_QCErrorLog
获取数据,而 qry_REP_MonthReportedSeverityTotal
从 tbl_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)
我有一个 table 包含一个 DATE/TIME 字段(DateSubmitted),一个 LONG INTEGER 字段(Score)和一个 TEXT 字段(Team)。
我运行以下查询没有问题(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)
但是,如果我然后 运行 基于这两个查询的第三个查询它没有正确加入它们并且我在 [=33= 中得到 #Error ]ST.sMonth 和 blanks/nulls 在 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 分钟,然后回来,现在它不起作用,除非我将查询都转换为字符串和长整数。
为什么 qry_REP_MonthlyReportedFigures
从 tbl_QCErrorLog
获取数据,而 qry_REP_MonthReportedSeverityTotal
从 tbl_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)