Tsql 分组加入?

Tsql 分组加入?,tsql,sql-server-2012,group-by,calendar,inner-join,Tsql,Sql Server 2012,Group By,Calendar,Inner Join,我有一个数据表和一个日历表。日期表仅包含MonthName和FiscalYearName字段。我的日历表上有每年的每一天。如何编写加入以确保我不会因为无法在某个日期加入而获得重复的数据?现在我只是在链接这两个字段,我得到了重复的数据。你能详细说明一下确切的问题吗 如果月份和年份是唯一的字段,那么为什么您需要在日历上加入呢?要消除重复项,最简单的解决方案可能是使用“DISTINCT” SELECT DISTINCT dat.year, dat.month, * FROM date dat

我有一个数据表和一个日历表。日期表仅包含MonthName和FiscalYearName字段。我的日历表上有每年的每一天。如何编写加入以确保我不会因为无法在某个日期加入而获得重复的数据?现在我只是在链接这两个字段,我得到了重复的数据。

你能详细说明一下确切的问题吗

如果月份和年份是唯一的字段,那么为什么您需要在日历上加入呢?要消除重复项,最简单的解决方案可能是使用“DISTINCT”

SELECT DISTINCT dat.year, dat.month, *
  FROM date dat
  JOIN calendar cal
    ON dat.year  = cal.year
   AND dat.month = cal.month
编辑; 额外的查询只显示MonthNum; 此查询使用一个公共表表达式,该表达式只获取一次不同的月份名称及其编号,然后在此cte上加入日期表

WITH cteCalendar AS
(
SELECT DISTINCT MonthName, MonthNum FROM calendar
)
SELECT cte.MonthNum, dat.*
FROM date dat
JOIN cteCalendar cte
AS dat.MonthName = cte.MonthName

那么,通过将一个只有年和月的表与一个只有年、月和日期的表连接起来,您希望得到什么样的结果呢?如果您可以提供示例查询,说明您正在使用日历表在这种情况下有什么意义,这将非常有帮助?也许你是。。。只需解释您试图修复的实际问题(而不是代码的问题),这可能会更容易。我试图返回日历表中存在的字段,而数据表中不存在该字段。数据表中只有MonthName,我想在查询中返回MonthNumber。MonthNumber是日历表中的一个字段,这就是我需要加入它的原因。那么,查看示例数据集和预期输出将非常有用。我的问题是需要返回日历表中存在的字段。我需要返回MonthNum的值。数据表只包含FiscalYear和MonthName。我添加了另一个使用公共表表达式的查询。这个查询基本上只从日历表中获取一次所有月份,然后在日期表中加入这个CTE,从而消除重复项。