代码之家  ›  专栏  ›  技术社区  ›  tsqln00b

在联接中分组?

  •  -2
  • tsqln00b  · 技术社区  · 9 年前

    1 回复  |  直到 9 年前
        1
  •  1
  •   Karel-Jan Misseghers    9 年前

    你能详细说明一下具体问题吗?

    如果月份和年份是唯一的字段,那么为什么您需要加入日历呢?为了消除重复项,最简单的解决方案可能是使用“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