SQL Server按不同的字符串匹配两列

时间:2016-11-18 18:26:50

标签: sql-server string datetime

所以我有两张桌子:

预期

  • 编号
  • numberOfItems
  • 日期

现实

  • 编号
  • numberOfItems
  • 日期

我希望每月获得Expected.numberOfItemsReality.numberOfItems之和的总和。

我遇到的问题是,虽然Expected.datedatetime,但Reality.dateint格式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的经验有限。

提前致谢。

3 个答案:

答案 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强制转换为日期时间。话虽这么说,如果你可以改变列的数据类型,你肯定应该这样做。

如果您需要查询帮助,请告诉我,我会编辑我的答案。