2010-09-27 271 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)