当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Artisan多表查询和统计

MSSQL
如何用SQL语句来判断已知表是否存在
剖析SQL Server 2005中的报告服务架构
使用Microsoft SQL Server 2000的XML查询
让SQL Server为工作负载高峰提前准备
用Sql server一次插入多条数据
SQL SERVER2000深入学习之常见错误
关于SQL Server数据库的若干注意事项
sql server 2005中的表分区
SQL Server实用经验与技巧大汇集
限制SQL Server只能让指定的机器连接
SQL Server数据汇总完全解析
SQL查询语句使用精华
优化SQL Server服务器内存配置的策略
Sql server进行优化50招特效
用SQL语句实现异构数据库之间的导数据导入/出
SQL Server Compact Edition RC1 发布!
SQL Server死锁的分析
加快SQL Server备份和重新存储的速度
使用TSQL操作面试SQL Server开发人员
SQL 外链接操作小结 inner join left join right join

MSSQL 中的 SQL Artisan多表查询和统计


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 62 ::
收藏到网摘: n/a

编写基于几个表的关联查询和统计的确是件烦琐的事情,由于基于字符的描述很多信息难以抽取出来共用,当其他地方需要这种情况的时候又必须重写。为了避免这情况SQL Artisan引用了视图对象,通过视图对象描述数据查询的信息;视图对象有一个最大的好处就是继承,可以从一个已经有的对象(实体对象或视图对象)继承下来扩展新的查询功能描述。实际应用中你可以建立一个基础统计视图对象,然后根据情况派生出具体的统计对象(如:根据不同信息分组,显示那些字段信息等).

下面是一些简单例程代码:

      订单销售金额统计基础视图对象

    /// <summary>

    /// 建立一个简单的订单销售金额统计类

    /// </summary>

    [TableMap("", TableType.View)]

    public class OrderStat:HFSoft.Data.ITableView

    {

        #region ITableView 成员

        public virtual Table GetTable()

        {

            // TODO:  添加OrderV.GetTable 实现

            return DBMapping.Orders.INNER(DBMapping.Employees, DBMapping.Employees.EmployeeID)& DBMapping.Orders.INNER(DBMapping.OrderDetails, DBMapping.Orders.OrderID)& DBMapping.OrderDetails.INNER(DBMapping.Products, DBMapping.Products.ProductID);

        }

        private Double mTotalize;

        [StatColumn("Quantity*[Order Details].UnitPrice*(1-Discount)", StatType.Sum)]

        public Double Totalize

        {

            get

            {

                return mTotalize;

            }

            set

            {

                mTotalize = value;

            }

        }

        #endregion

}

按雇员分组统计情况继承实现

    /// <summary>

    /// 按雇员进行分组统计

    /// </summary>

    [TableMap("", TableType.View)]

    public class EmployeeTotal:OrderStat

    {

        private int mEmployeeID;

        [ViewColumn("Employees.EmployeeID")]

        public int EmployeeID

        {

            get

            {

                return mEmployeeID;

            }

            set

            {

                mEmployeeID = value;

            }

        }

        private str