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'
        

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

  1. Sql Server FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  2. 灵活运用 SQL SERVER FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  3. 转王波洋,SQL语句中的 for XML Path('')

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  4. sql FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

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

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  6. SQL Server XML Path[转]

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  7. SQL FOR XML PATH 和 Stuff 用法

    sql stuff 用法 1.作用 删除指定长度的字符,并在指定的起点处插入另一组字符. 2.语法 STUFF ( character_expression , start , length ,cha ...

  8. sql for xml path用法

    一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看 ...

  9. FOR XML PATH 简单介绍

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

随机推荐

  1. 重新学习struts

    这就是所谓的一边工作一边学习. 今天准备把给公司写个管理页面,按照之前的路数,写起来应该挺快,但是不太规范.也就沉下心来学习一下了. 第一个学习的是,之前,在学校,听师兄说过,对页面编码可用inter ...

  2. 【C语言】-循环结构-while语句

    while语句: while循环可实现"当型"循环,即当条件成立时,执行循环体.适合无法确定循环执行次数的情况. while (表达式) { 循环语句 } 注意: 表达式为循环控制 ...

  3. python 错误、调试和测试

    在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的. 有的错误是用户输入造成的,比如让用 ...

  4. hdoj 2083 简易版之最短距离

    简易版之最短距离 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. iOS CAShapeLayer精讲

    前言 CAShapeLayer继承自CALayer,因此,可使用CALayer的所有属性.但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义. 关于UIBezierPath,请阅读文章:i ...

  6. 转载 SharePoint 2013配置Master Page and Page Layout

    转载原地址: http://www.cnblogs.com/huangjianwu/p/4539706.html 涉及到的内容是关于SharePoint 2013如何部署自定义的母版页和布局页. 进入 ...

  7. SQLite 使用教程2 语法

    http://www.runoob.com/sqlite/sqlite-syntax.html SQLite 语法 SQLite 是遵循一套独特的称为语法的规则和准则.本教程列出了所有基本的 SQLi ...

  8. 模拟京东商城登陆HttpRequest

    利用Winform HttpRequest 模拟登陆京东商城 目前只获取订单信息,可以获取图片等其他信息 using System; using System.Collections.Generic; ...

  9. android135 360 来电去电归属地显示,自定义toast,

    点击会开启服务. sivAddress.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) ...

  10. android133 360 06 一键锁频,清楚数据

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...