sqlserver 分组查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver 分组查询相关的知识,希望对你有一定的参考价值。

a表中有人员基本信息,
目的是按部门分组显示,如下显示格式,一个部门一个部门分开显示
部门a
张三 男 23
李四 女 25
部门b
王五 男 20
赵六 女 30

参考技术A sqlserver能按部门排序列出,但无法按此格式列出。总体上说,你这属于界面表达这一层次的问题,应编写界面程序实现。数据库的任务一般还是纯粹的数据存取这个层次,所以这个概念要清晰,即不同任务分别适合放在哪个层次是很重要的。 参考技术B SELECT * FROM [a表] ORDER BY [部门]

sqlserver 存储过程 递归查询分组+hierarchyid重建会员关系

CREATE PROCEDURE [dbo].[GetGroupInfo]
    @s_code NVARCHAR(16) = 0  --会员卡号
AS
BEGIN
declare @p int;                    --查询唯一性结果
declare @sql nvarchar(1000);       --拼接查询sql字串
set @sql=SELECT @p=n_teamlevel FROM t_user_basic WHERE s_code= +@s_code;
exec sp_executesql @sql,N@p AS int OUTPUT,@p OUTPUT;
with cte( NodeID,n_user,s_code,s_introducer,n_teamlevel ) as(
    SELECT 
        NodeID=hierarchyID::Parse(/1/)
        ,n_user
        ,s_code
        ,s_introducer
        ,n_teamlevel 
    FROM t_user_basic
    WHERE s_code=@s_code    
    union all
    SELECT 
        NodeID=cast(b.NodeID.ToString() + cast(ROW_NUMBER() over (order by a.n_user) as varchar(10)) + / as hierarchyid)
        ,a.n_user
        ,a.s_code
        ,a.s_introducer
        ,a.n_teamlevel 
    FROM t_user_basic a
    inner join cte b on (a.s_introducer=b.s_code)
    WHERE  a.s_introducer<>-1 and a.n_user>0 and a.n_teamlevel < @p
)
--SELECT * FROM cte WHERE n_teamlevel < @p and s_code <> @s_code and n_teamlevel <> null;
SELECT cast(NodeID as hierarchyid).ToString(),n_user,s_code,s_introducer,n_teamlevel FROM cte
END


---execute [dbo].[GetGroupInfo] 864160951

 

以上是关于sqlserver 分组查询的主要内容,如果未能解决你的问题,请参考以下文章

SqlServer:分组查询和聚集函数

sqlserver 模糊查询,连表,聚合函数,分组

sqlserver_query3_去重查询|模糊查询|排序|分组|使用函数

SQL Server:查询分组

sqlserver 存储过程 递归查询分组+hierarchyid重建会员关系

连接查询和分组查询