使用for xml path 分组查询

SELECT

OLevel,

WorkOrgID,

WorkOrgName,

PlanNum,

PlanFinishNum,

PlanUnFinishNum,

PlanCanceledNum,

PlanChangedNum,

OrtherNum,

PlanTime,

ActualTime,

RIGHT(PlanIDs,LEN(PlanIDs)-1) AS PlanIDs

FROM (SELECT

( CASE MIN(Parent)

WHEN ‘E13744A1-7E2C-42E8-8E7B-4D52F9E04A08‘ THEN MIN(ROLevel)

ELSE MIN(OLevel)

END ) AS OLevel ,

( CASE MIN(Parent)

WHEN ‘E13744A1-7E2C-42E8-8E7B-4D52F9E04A08‘

THEN MIN(RegulatoryOrgID)

ELSE WorkOrgID

END ) AS WorkOrgID ,

( CASE MIN(Parent)

WHEN ‘E13744A1-7E2C-42E8-8E7B-4D52F9E04A08‘ THEN MIN(RoName)

ELSE WorkOrgName

END ) AS WorkOrgName ,

MIN(RegulatoryOrgID) AS RegulatoryOrgID ,

COUNT(1) AS PlanNum ,

SUM(CASE FormStatusCode

WHEN ‘Finish‘ THEN 1

ELSE 0

END) AS PlanFinishNum ,

COUNT(CASE WHEN FormStatusCode != ‘Finish‘ THEN 1

ELSE 0

END) AS PlanUnFinishNum ,

SUM(CASE WHEN FormStatusCode = ‘Canceled‘ THEN 1

ELSE 0

END) AS PlanCanceledNum ,

SUM(CASE WHEN FormStatusCode = ‘Changed‘ THEN 1

ELSE 0

END) AS PlanChangedNum ,

SUM(CASE WHEN FormStatusCode IN ( ‘Approved‘, ‘Begining‘, ‘Begin‘ )

THEN 1

ELSE 0

END) AS OrtherNum ,

SUM(CASE WHEN DATEDIFF(mi, PlanBeginTime, PlanEndTime) < 0 THEN 0

WHEN DATEDIFF(mi, PlanBeginTime, PlanEndTime) IS NULL THEN 0

ELSE DATEDIFF(mi, PlanBeginTime, PlanEndTime)

END) AS PlanTime ,

SUM(CASE WHEN DATEDIFF(mi, CheckInApproveTime, CheckOutApproveTime) < 0

THEN 0

WHEN DATEDIFF(mi, CheckInApproveTime, CheckOutApproveTime) IS NULL

THEN 0

ELSE DATEDIFF(mi, CheckInApproveTime, CheckOutApproveTime)

END) AS ActualTime ,

( SELECT    ‘,‘ +‘‘‘‘+ CAST(wp.PlanID AS VARCHAR(40)) +‘‘‘‘

FROM      dbo.PL_WorkPlan wp

LEFT JOIN dbo.PL_WorkDetail wd ON wd.PlanID = wp.PlanID

LEFT JOIN dbo.PT_WorkPoint pp ON wp.PlanID = pp.PlanID

INNER JOIN dbo.SEC_Organization o ON o.Id = wd.WorkOrgID

LEFT JOIN dbo.SEC_Organization RO ON ro.Id = wd.RegulatoryOrgID

WHERE     wp.FormStatusCode NOT IN ( ‘Draft‘, ‘Approving‘ )

AND wd.WorkOrgName IS NOT NULL

AND ( WorkOrgID = V.WorkOrgID )

FOR

XML PATH(‘‘)

) PlanIDs

FROM    ( SELECT    wd.WorkTypeCode ,

wp.planid ,

wp.PlanBeginTime ,

wp.PlanEndTime ,

WP.FormStatusCode ,

PlanTypeCode ,

wd.WorkOrgID ,

wd.RegulatoryOrgID ,

o.Parent ,

wd.WorkOrgName ,

o.[Level] AS OLevel ,

RO.[Level] AS ROLevel,

Ro.NAME AS RoName,

CheckInApproveTime ,

CheckOutApproveTime

FROM      dbo.PL_WorkPlan wp

LEFT JOIN dbo.PL_WorkDetail wd ON wd.PlanID = wp.PlanID

LEFT JOIN dbo.PT_WorkPoint pp ON wp.PlanID = pp.PlanID

INNER JOIN dbo.SEC_Organization o ON o.Id = wd.WorkOrgID

LEFT JOIN dbo.SEC_Organization RO ON ro.Id = wd.RegulatoryOrgID

WHERE     wp.FormStatusCode NOT IN ( ‘Draft‘, ‘Approving‘ )

AND wd.WorkOrgName IS NOT NULL

) V

WHERE   1 = 1

and WorkTypeCode in ($WorkTypeCode$)

and V.PlanBeginTime >= @BeginTime

and V.PlanBeginTime < @EndTime

{? and V.LineID = @LineID }

{? and  V.PlanTypeCode = @PlanTypeCode }

{? and V.WorkOrgID = @WorkOrgID }

GROUP BY

WorkOrgID ,

WorkOrgName)

as  V2

WHERE V2.WorkOrgID !=‘00000000-0000-0000-0000-000000000000‘

时间: 2024-10-18 20:11:50

使用for xml path 分组查询的相关文章

灵活运用 SQL SERVER FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FO

SQL FOR XML PATH 和 Stuff 用法

sql stuff 用法 1.作用 删除指定长度的字符,并在指定的起点处插入另一组字符. 2.语法 STUFF ( character_expression , start , length ,character_expression ) 3.示例 以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串 SELECT STUFF('abcdef', 2, 3, 'ijklmn')GO 下面是结果集 a

SQL SERVER FOR XML PATH

转自:王波洋 (PS:对当前的博客进行了阅读,感觉不错,本来计划自己写一下,后来实在是时间不充裕并且博主写的不错,故转过来并稍微修正下) FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作. 一.FOR XML PATH 简单介绍           那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:

使用 SQL的 for xml path来进行字符串拼接

本篇主要讲怎么利用SQL的FOR XML PATH 参数来进行字符串拼接,FOR XML PATH的用法很简单,它会以xml文件的形式来返回数据. 我的讲解步骤: 1:构造初始数据 2:提出问题 3:简单介绍FOR XML PATH 4:解答问题 1.构造初始数据 举出一个经典的学生课程例子,共有学生.课程与学生课程三张表. 表1:Student student_id student_name 1 张三 2 李四 3 王五 表2:Course course_id course_name 1 语言

灵活运用 SQL SERVER FOR XML PATH 转

灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果

sqlserver - FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FO

问题:sqlserver有没有类似Oracle的LISTAGG;结果: 灵活运用 SQL SERVER FOR XML PATH

灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果

FOR XML PATH 解决联接返回结果集各记录问题

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FO

转王波洋,SQL语句中的 for XML Path(&#39;&#39;)

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FO