代码之家  ›  专栏  ›  技术社区  ›  Andy Evans

SQL查询帮助

  •  1
  • Andy Evans  · 技术社区  · 14 年前

    这不是家庭作业的问题,只是工作中让我心烦的问题。

    我正试图对下面的这些表编写一个查询。历史记录和代码这两个表通过历史记录ID和代码ID列与历史记录分配表联接。

    Table: HistoryAssignment
    
    | AssignmentID | HistoryID | CodeID |
    |--------------|-----------|--------|
    | 1            | 100       | 200    |
    |--------------|-----------|--------|
    | 2            | 101       | 201    |
    |--------------|-----------|--------|
    | 3            | 102       | 202    |
    |--------------|-----------|--------|
    
    Table: Code 
    
    | CodeID | Desc |
    |--------|------|
    | 200    | ABC  |
    |--------|------|
    | 201    | DEF  |
    |--------|------|
    | 202    | GHI  |
    |--------|------|
    
    Table: History
    
    | HistoryID | Desc | HistDate |
    |-----------|------|----------|
    | 100       | JKL  | 5/1/2010 |
    |-----------|------|----------|
    | 101       | MNO  | 7/1/2009 |
    |-----------|------|----------|
    | 102       | PQR  | 7/9/2010 |
    |-----------|------|----------|
    | 103       | STU  | 6/2/2010 |
    |-----------|------|----------|
    | 104       | VWX  | 5/7/2010 |
    |-----------|------|----------|
    | 105       | YZ   | 2/5/2010 |
    |-----------|------|----------|
    

    我的目标是获得HistoryAssignment表中映射的历史ID总数和History表中存在的历史ID总数。结果应按历史记录表中HistDate列的月份和年份分组。如下所示。

    Year    Month   Total   Mapped
    2009    7   1   1
    2010    2   1   0
    2010    5   2   1
    2010    6   1   0
    2010    7   1   1
    

    如有任何帮助,我们将不胜感激。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Martin Smith    14 年前
    SELECT   YEAR(HistDate) [Year]      ,
             MONTH(HistDate) [Month]    ,
             COUNT(h.HistoryID) [Total] ,
             COUNT(DISTINCT ha.HistoryID) [Mapped]
    FROM     History h
             LEFT OUTER JOIN HistoryAssignment ha
             ON       ha.HistoryID = h.HistoryID
    GROUP BY YEAR(HistDate),
             MONTH(HistDate)
    ORDER BY YEAR(HistDate),
             MONTH(HistDate)