所以我有两张桌子:
预期:
现实:
我希望每月获得Expected.numberOfItems
和Reality.numberOfItems
之和的总和。
我遇到的问题是,虽然Expected.date
是datetime
,但Reality.date
是int
格式YYYYMM
。我的猜测是我需要匹配字符串,所以我得到了类似的东西:
select distinct(a.date) as expected, sum(a.items), sum(b.items)
from A a, B b
where a.date = [some manipulation](b.date)
group by a.date order by a.date desc
这甚至是合法的吗?有没有更好的方法?它看起来对我来说并不好,但我对SQL Server的经验有限。
提前致谢。
答案 0 :(得分:1)
您正在寻找FULL OUTER JOIN
SELECT COALESCE(a.date, [some manipulation](b.date)) AS expected,
Sum(a.items),
Sum(b.items)
FROM a a
FULL OUTER JOIN b b
ON a.date = [some manipulation](b.date)
GROUP BY COALESCE(a.date, [some manipulation](b.date))
ORDER BY a.date DESC
答案 1 :(得分:1)
您可以使用convert(...,112)通过将期望日期转换为'YYYYMM'格式的int来进行查询。如果您正在考虑多次进行转换,请尝试使用CTE,您可以转换一次并多次使用
public class XmlBuilder{
public XMLMessage buildXmlMessage(DocumentInformation documentInformation){
XMLMessageConfig xmlConfig = documentInformation.getDocumentProductionConfiguration().handle();
}
}
答案 2 :(得分:0)
select distinct(a.date) as expected, sum(a.items), sum(b.items)
from A a, B b
where a.date = cast(b.date as datetime)
group by a.date order by a.date desc
您需要使用强制转换将int强制转换为日期时间。话虽这么说,如果你可以改变列的数据类型,你肯定应该这样做。
如果您需要查询帮助,请告诉我,我会编辑我的答案。