在 SQL Server 中合理的使用 LEFT OUTER JOIN 进行开发!
发布时间:2018-08-16 23:35:15 所属栏目:电子商务 来源:站长网
导读:比如我们想对某人的消费项目进行汇总,对应以下两个表:Theme 与 ThemeDetail Theme 的记录为: ThemeID(int)ThemeName(varchar[10]) 1就餐 2出差 3乘车 4其它 ThemeDetail 的记录为: DetailID(int)ThemeID(int)Price(money) 1112.5 215 316 4211 5217 63
比如我们想对某人的消费项目进行汇总,对应以下两个表: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 这样是不是就满足了我们的要求呢! (编辑:武汉站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |