2010-09-27 141 views
1

这不是一个家庭作业问题,只是在困扰我的工作中。SQL查询帮助

我想写下面这些表的查询。这两个表,历史和代码通过historyid和codeid列连接到历史分配表。

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

我的目标是让那些在historyassigment表和历史ID的总数有历史表中的映射历史ID的总数的计数。结果应按历史记录表中的历史记录列的月份和年份进行分组。如下所示。

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

任何援助将不胜感激。

+0

当我看着它,我可能不需要代码表后退。对于每个月/每年,我需要知道有多少个历史项目以及有多少个已经映射。 – 2010-09-27 20:58:26

回答

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)