sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計)

---sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計)
---2014-08-26 塗聚文(Geovin Du)
CREATE PROCEDURE proc_Select_BookKindSumReport
AS
DECLARE @temp TABLE
(
      BookKindID INT IDENTITY(1, 1) ,
      BookKindName  VARCHAR(10),
      BookKindParent int,
	  BookKindSum int
)
--
declare @id int,@grouid nvarchar(500),@sql nvarchar(4000),@cstucount int,@c int
DECLARE @tempId INT ,
    @tempName VARCHAR(10),
    @tempParent int
drop table #temp
select * into #temp from BookKindList
WHILE EXISTS ( SELECT   BookKindID FROM   #temp )
    BEGIN
        SET ROWCOUNT 1
        SELECT  @tempId = [BookKindID] ,
                @tempName = [BookKindName],
				@tempParent=BookKindParent
        FROM    #temp
        SET ROWCOUNT 0
--
delete from #temp where BookKindID = @tempId
        set @[email protected]
        select  @grouid=dbo.GetBookKindGroupId (@id)
select @sql=‘SELECT @c=count(*) FROM BookInfoList where BookInfoKind in (‘[email protected]+‘)‘
--exec (@sql)
exec sp_executesql @sql,N‘@c int output‘,@cstucount output--将exec的结果放入变量中的做法
--select @cstucount  as ‘sum‘
        --PRINT ‘记录:----‘+ cast(@tempId as varchar(20))+‘,‘ + @tempName+‘,‘+ cast(@tempParent as varchar(20))+‘ sum:‘+ cast(@cstucount as varchar(50))
insert into @temp(BookKindName,BookKindParent,BookKindSum) values(@tempName,@tempParent,@cstucount)
END
select * from @temp order by BookKindParent
GO

--利用游标来遍历表
--定义表变量
DECLARE @temp TABLE
(
      BookKindID INT IDENTITY(1, 1) ,
      BookKindName  VARCHAR(10),
      BookKindParent int
)  

DECLARE @tempId INT ,
    @tempName VARCHAR(10),
	@tempParent int
DECLARE test_Cursor CURSOR LOCAL FOR
SELECT   BookKindID,BookKindName,BookKindParent FROM @temp
--插入数据值
INSERT  INTO @temp VALUES  ( ‘a‘,1 )
INSERT  INTO @temp VALUES  ( ‘b‘,2 )
INSERT  INTO @temp VALUES  ( ‘c‘,3 )
INSERT  INTO @temp VALUES  ( ‘d‘,4 )
INSERT  INTO @temp VALUES  ( ‘e‘,5 )
--打开游标
OPEN test_Cursor
WHILE @@FETCH_STATUS = 0
    BEGIN
        FETCH NEXT FROM test_Cursor INTO @tempId,@tempname,@tempParent
        PRINT ‘记录:----‘ + cast(@tempId as varchar(20))+‘,‘ + @tempName+‘,‘+ cast(@tempParent as varchar(20))
    END
CLOSE test_Cursor
DEALLOCATE test_Cursor
时间: 2024-08-04 18:39:32

sql: T-SQL 统计计算(父子關係,樹形,分級分類的統計)的相关文章

SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012-->SQL2014-->SQL2016)

原文:SQL Server 中统计信息直方图中对于没有覆盖到谓词预估以及预估策略的变化(SQL2012-->SQL2014-->SQL2016) 本文出处:http://www.cnblogs.com/wy123/p/6770258.html 统计信息写过几篇了相关的文章了,感觉还是不过瘾,关于统计信息的问题,最近又踩坑了,该问题虽然不算很常见,但也比较有意思.相对SQL Server 2012,发现在新的SQL Server版本(2014,2016)中都有一些明显的变化,下文将对此进行粗浅的

SQL Server 查找统计信息的采样时间与采样比例

原文:SQL Server 查找统计信息的采样时间与采样比例 有时候我们会遇到,由于统计信息不准确导致优化器生成了一个错误的执行计划(或者这样表达:一个较差的执行计划),从而引起了系统性能问题.那么如果我们怀疑这个错误的执行计划是由于统计信息不准确引起的.那么我们如何判断统计信息不准确呢?当然首先得去查看实际执行计划中,统计信息的相关数据是否与实际情况有较大的出入,下面我们抛开这个大命题,仅仅从统计信息层面去查看统计信息的更新时间,统计信息的采样行数.采样比例等情况. 1:首先,我们要查查统计信

SQL Server 监控统计阻塞脚本信息

原文:SQL Server 监控统计阻塞脚本信息 数据库产生阻塞(Blocking)的本质原因 :SQL语句连续持有锁的时间过长 ,数目过多, 粒度过大.阻塞是事务隔离带来的副作用,它是不可避免的,而且是一个数据库系统常见的现象. 但是阻塞的时间和出现频率要控制在一定的范围内,阻塞持续的时间过长或阻塞出现过多(过于频繁),就会对数据库性能产生严重的影响. 很多时候,DBA需要知道数据库在出现性能问题时,有没有发生阻塞? 什么时候开始的?发生在那个数据库上? 阻塞发生在那些SQL语句之间? 阻塞的

mysql 查询随机条记录的sql语句和php计算概率

最近在网上找了下mysql查询随机的几个sql,我把最终的记录下来. SELECT * FROM uchome_mtag AS a JOIN (SELECT MAX(tagid) AS id FROM uchome_mtag) AS b ON (a.tagid>=FLOOR(b.id*RAND())) LIMIT 50 我试验后发现一个问题,当你的表里的总数和想要得到的条数很接近时,可能会不理想,有可能你有10条,你想查出随机的8条时,却只给出了5条的结果. 应该是那个大于等于造成的吧. 还有p

SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过拆分SQL来优化的博文,最近刚好遇到一个实际案例,比较有代表性,现分享出来, 我们来通过一个案例来分析,为什么拆分语句可以提高SQL执行效率,更重要的是弄清楚,拆分前为什么慢,拆分后为什么快了? 幼稚的话,各位看官莫笑 先看一下相关表的数据量,大表也有5900多万,小表有160多万 (声明:我从来没

金典 SQL笔记 SQL语句汇总

SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY id) AS rowN,FNumber, FName,FSalary ,Fage FROM dbo. T_Employee) AS a WHERE a. rowN >=3 AND a. rowN <=5 SELECT distinct CREATEDate,state FROM dbo .TwodimensionalcodeHistory SELECT * FROM Twodimensiona

对SQL Server SQL语句进行优化的10个原则

1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存放在数据页上.合理的索引设计要建立在对各种查询的分析和预测上.一般来说:①.有大量重复值.且经常有范围查询(between, >,< ,>=,< =)和order by.group by发生的列,可考虑建立群集索引:②.经常同时存取多列,且每列都含有重复值可考虑建立组合索引:③.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列. 2.IS NUL

sql%bulk_rowcount &amp;&amp; sql%rowcount 的使用

说明: %BULK_ROWCOUNT 属性计算FORALL迭代影响行数 在进行SQL数据操作语句时,SQL引擎打开一个隐式游标(命名为SQL),该游标的标量属性(scalar attribute)有 %FOUND, %ISOPEN, %NOTFOUND, and %ROWCOUNT. FORALL语句除具有上边的标量属性外,还有个复合属性(composite  attribute):%BULK_ROWCOUNT,该属性具有索引表(index-by  table)语法.它的第i个元素存贮SQL语句

類之間的關係

類與類之間的關係主要分為以下幾種: 關聯關係, 聚合關係(整體和個體的關係) 合成關係,顧名思義,合成一個整體,兩者共存亡. 依賴關係,通過參數傳遞的關係傳遞過來,只在依賴方法里生效. 繼承關係, 接口實現關係. ps:新手上路多多關照,如有錯誤,請多指教!