SQL查询帮助

时间:2010-09-27 20:52:07

标签: sql sql-server sql-server-2005 stored-procedures

这不是一个家庭作业问题,只是在工作中让我烦恼的事情。

我正在尝试针对下面的这些表编写查询。这两个表,历史记录和代码通过historyid和codeid列连接到historyassignment表。

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 |
|-----------|------|----------|

我的目标是获取历史数据表中映射的历史ID总数以及历史记录表中的历史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 个答案:

答案 0 :(得分:1)

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)