数据库

 首页 > 数据库 > SqlServer > 用SQL Server Having盘算列和均匀值

用SQL Server Having盘算列和均匀值

分享到:
【字体:
导读:
         摘要: 做为一名数据库语言和用法教师,我发明一些特别难以说明的主题。其中的一个主题为SQL Server的Having子句。在本文中,我将简略阐明这个子句,并供给一些代码实例,我想这是阐明Ha...

用SQL Server Having盘算列和均匀值

做为一名数据库语言和用法教师,我发明一些特别难以说明的主题。其中的一个主题为SQL Server的Having子句。在本文中,我将简略阐明这个子句,并供给一些代码实例,我想这是阐明Having子句用法的最佳方法。

严格来说,Having并不需要一个子表,但没有子表的Having并没有实际意义。假如你只需要一个表,那么你可以用Where子句达到一切目标。为进行实践,Having预先假定至少两个表和一个基于第二个表的合计函数。

下面是一个简略的例子:你想要订单总数超过25000美元的客户清单。你需要适当连接的三个表:Customer、SalesOrderHeader和SalesOrderDetail。然后,你求Detail的和,并将总数与25000美元进行比拟。查看列表A。

查看列表A中的代码时,有一件事情并不明显,即LineTotal列被盘算。你可以像求实际的列的和一样求出已盘算列的和。但是,你不能在同一个把持中履行两个不同层次的合计函数。

以下为引用的内容:
SELECT
            Sales.Customer.CustomerID,
            Sales.SalesOrderHeader.SalesOrderID,
            SUM(Sales.SalesOrderDetail.LineTotal)
            AS SubTotalFROM
            Sales.Customer
            INNER JOIN Sales.SalesOrderHeader
            ON Sales.SalesOrderHeader.Customer
            ID = Sales.Customer.CustomerID
            INNER JOIN Sales.SalesOrderDetail
            ON Sales.SalesOrderDetail.SalesOrder
            ID = Sales.SalesOrderHeader.SalesOrderIDGROUP BY
            Sales.Customer.CustomerID,
            Sales.SalesOrderHeader.SalesOrder
            IDHAVING SUM(LineTotal) > 25000.00ORDER BY
            Sales.Customer.CustomerID,
            SalesOrderID ;
 
列表A

假设你盼看知道所有客户的均匀销售额。你可以应用列表B中的代码,它返回如下错误信息:

以下为引用的内容:
SELECT
            Sales.SalesOrderHeader.SalesOrderID,
            AVG(SUM(Sales.SalesOrderDetail.LineTotal))
            AS AverageFROM
            Sales.SalesOrderHeader
            INNER JOIN Sales.SalesOrderDetail
            ON Sales.SalesOrderDetail.SalesOrder
            ID = Sales.SalesOrderHeader.SalesOrder
            IDGROUP BY
            Sales.SalesOrderHeader.SalesOrderID
 
列表B

以下为引用的内容:
Msg 130, Level 15, State 1, Line 1
            Cannot perform an aggregate function on an expression
            containing an aggregate or a subquery.
错误信息

你可以将均匀值的盘算过程进行分解来解决这个标题。你可以将第一部分(SUM)编写成一个表值UDF,如列表C所示。你可以根据列表D中的函数盘算均匀值。列表E阐明你如何能够进行组合。

以下为引用的内容:
USE [AdventureWorks]
            GO
            /****** Object:  UserDefinedFunction
            [dbo].[SalesTotals_fnt]
            Script Date: 12/09/2006 11:32:54 ******/
            SET ANSI_NULLS ON
            GO
            SET QUOTED_IDENTIFIER ON
            GO
            CREATE FUNCTION [dbo].[SalesTotals_fnt]()
            RETURNS TABLE
            AS RETURN
            (SELECT SalesOrderID,
            SUM(LineTotal)AS TotalSale
            FROM Sales.SalesOrderDetail
            GROUP BY Sales.SalesOrderDetail.SalesOrderID)

列表C

以下为引用的内容:
CREATE FUNCTION [dbo].[AverageSale_fns] (
            -- Add the parameters for the function here
            --  )RETURNS money
            ASBEGIN
            -- Declare the return variable here
            DECLARE @Result money
            -- Add the T-SQL statements to compute the return value here
            SET @Result =(SELECTAvg(TotalSale)AS AverageSale
            FROM dbo.SalesTotals_fnt())
            -- Return the result of the function
            RETURN @Result
            END

列表D

以下为引用的内容:
DECLARE @Avg moneySELECT @Avg = dbo.AverageSale_fns()
            SELECT       *, @Avg as Average,
            TotalSale / @Avg as Ratio,      CASE
            WHEN TotalSale / @Avg > 1 THEN 'Above Average' 用SQL Server Having盘算列和均匀值

  • 打酱油

  • 震惊

  • 呵呵


  • 鄙视
标签标签:PHP ,CSS数据库 ,优化
立即登录 | 注册新用户
最新评论
  • 不吐不快,赶紧来一发!
栏目推荐
  • 使用SQL Server内存数据库前需要理解的三个问题
  • PHP连接 SQLSERVER 注意事项(经典中的经典)
  • Php+SqlServer实现分页显示
  • Linux下php连接sqlserver的办法
  • php SQLserver 导入 Mysql
  • PHP模拟SQLServer的两个日期处理函数
  • php与sqlserver中文数据为乱码的解决
  • Linux下PHP连接MS SQLServer的办法
  • 微软为PHP添加SQL Server LocalDb及SQL Server AlwaysOn集群支持
  • 远程连接sql server 2000数据库失败解决办法
关注 第一PHP社区 微信公众号
热门点击
  • 新闻APP后端系统架构成长之路 - 高可用架构设计
  • PHP基础: CLI模式开发不需要任何一种Web服务器
  • 基础教程:svn命令在linux下的使用
  • 亿级Web系统搭建——单机到分布式集群
  • HTTP简介,http是一个属于应用层的面向对象的协议
  • Serverless技术架构,传说中的FAAS(Function as a Service),极简运维,无限扩容
  • PHP漏洞全解(六)跨网站请求伪造
  • php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
  • PHP学习路线以及10个PHP优化技巧
  • 适用于PHP初学者的学习线路和建议
本站推荐
  • 2016PHP技术盛会:如何编写可测试的代码
  • MySQL改密码报错:ERROR 1045: Access denied for user: 'root@localhost' (Using password: YES)
  • phpmyadmin导入导出数据库文件最大限制的解决方法
  • Linux环境下MySQL数据库大小写区分问题
  • php 5.4中php-fpm 的重启、终止操作命令
  • Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
  • Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
  • Key/Value之王Memcached初探:一、掀起Memcached的盖头来
  • NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索
  • NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP论坛
Copyright © 1998 - 2015 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有
快云为本站提供专业云计算服务      
分享到:
巧用一条SQL语句实现其它进制到十进制转...
巧用一条SQL语句实现其它进制到十进制转换 巧用一条SQL语句实现其它进制到十进制转换,具体实现方法如下: -----二进制转换十进制----------------- 以下为引用的内容:   select sum(data1)   from (select substr('1101', rownum, 1) * power   (2, length('1101') - rownum) data1  ...
SQL Server 2005深层工具和运行时间集
SQL Server 2005深层工具和运行时间集 本文分析SQL Server 2005深层工具和运行时间集。 简化的开发和调试 Microsoft Visual Studio与.NET Framework的紧密集成,使数据驱动的利用系统开发和调试更加顺畅. 开发职员可以建立数据库对象, 比如存储过程, 应用任何.NET语言并且能够无缝地跨越.NET 和Transact-SQL (TSQL)语言进行...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……