欢迎光临
我们一直在努力

在 SQL Server 中合理的使用 LEFT OUTER JOIN 进行开发!-数据库专栏,SQL Server

建站超值云服务器,限时71元/月

比如我们想对某人的消费项目进行汇总,对应以下两个表: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

这样是不是就满足了我们的要求呢!

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在 SQL Server 中合理的使用 LEFT OUTER JOIN 进行开发!-数据库专栏,SQL Server
分享到: 更多 (0)

相关推荐

  • 暂无文章