比如我們想對某人的消費項目進行匯總,對應以下兩個表:Theme 與 ThemeDetail
Theme 的記錄為:
ThemeID(int) ThemeName(varchar[10])
1 就餐
2 出差
3 乘車
4 其它
ThemeDetail 的記錄為:
DetailID(int) ThemeID(int) Price(money)
1 1 12.5
2 1 5
3 1 6
4 2 11
5 2 17
6 3 8
其中 Theme 中的 ThemeID 與 ThemeDetail 中的 ThemeID 是一對多的關係,對 ThemeDetail 表的理解如下:“就餐”費用為 12.5 + 5 + 6 = 23.5 元,“出差”費用為 11 + 17 = 28 元,“乘車”費用為 8 = 8 元,“其它”費用不存在,視為 0 處理,對應的 SQL 陳述式可以這樣表示:
SELECT TOP 100 PERCENT dbo.Theme.ThemeName, ISNULL(SUM(dbo.ThemeDetail.Price), 0)
AS TotalPrice
FROM dbo.Theme INNER JOIN
dbo.ThemeDetail ON dbo.Theme.ThemeID = dbo.ThemeDetail.ThemeID
GROUP BY dbo.Theme.ThemeName, dbo.Theme.ThemeID
ORDER BY dbo.Theme.ThemeID
執行結果如下:
ThemeName TotalPrice
就餐 23.5
出差 28
乘車 8
對於消費記錄不存的記錄如果就這樣不顯示它的話,使用內聯的方法就可以滿足要求了,但是我們現在需要對 Theme 中的每一項均做統計,也包括“其它”項,於是我們應該採用另一種方法來實現,這就是左外聯的方法,相應的 SQL 陳述式可以這樣表示:
SELECT TOP 100 PERCENT dbo.Theme.ThemeName, ISNULL(SUM(dbo.ThemeDetail.Price), 0)
AS TotalPrice
FROM dbo.Theme LEFT OUTER JOIN
dbo.ThemeDetail ON dbo.Theme.ThemeID = dbo.ThemeDetail.ThemeID
GROUP BY dbo.Theme.ThemeName, dbo.Theme.ThemeID
ORDER BY dbo.Theme.ThemeID
執行結果如下:
ThemeName TotalPrice
就餐 23.5
出差 28
乘車 8
其它 0
這樣是不是就滿足了我們的要求呢!