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. 5个经典的JavaScript面试基础问题

    JavaScript程序员在IT领域中的需求量非常巨大.如果你非常精通JavaScript,你会有很多换工作.涨薪水的机会.但是在一家公司录用你之前,你必须顺利通过面试,证明你的技能.在本文中,我将向 ...

  2. springMVC get请求及其请求地址写法

    今天,需要写一个接口,写完之后,测试的时候发线一直报404错误,不知道为什么报错.应该是get请求地址的问题,get请求有两个参数,改为一个参数的时候是好用的,可能那种方式不适合写两个参数的get请求 ...

  3. Asp.Net Core- 多样性的配置来源

    我们知道,ConfigurationProvider提供将数据源转换为字典的功能,数据源可以分为很多种,比如:物理文件.数据库.内存变量等等.物理文件又包括很多种类型的文件,比如:xml.json等等 ...

  4. Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api

    转自:http://www.himigame.com/iphone-cocos2dx/743.html Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Jav ...

  5. 【转】安装Ubuntu 15.10后要做的事

    Ubuntu 15.10发布了,带来了很多新特性,同样也依然带着很多不习惯的东西,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java ...

  6. iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效

    ViewDidLoad中注册手势的部分代码如下: [cpp] view plaincopy UITapGestureRecognizer *oneTap = [[[UITapGestureRecogn ...

  7. 关于Mysql Can't connect to mysql server on localhost(10061)的问题解决

    这个问题很烦,试了网上很多朋友的方法,还是不行,大家都知道卸载mysql再想装就不那么容易了(虽然我卸载安装无数次都成功了),好了,不废话了, 如果出现这种问题,不要急,找到mysql的安装包  例如 ...

  8. Android从入门到精通pdf+书源代码

    不须要积分,免费放送 Android从入门到精通的pdf,入门的好书籍,因为csdn文件大小的限制所以分成了两部分. part1地址:http://download.csdn.net/detail/a ...

  9. Codeforces Round #321 (Div. 2) B. Kefa and Company 二分

    B. Kefa and Company Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/580/pr ...

  10. C++和python使用struct传输二进制数据结构来实现

    网络编程问题往往涉及二进制数据的传输.在C++经常使用的传输是文本字符串和分组结构. 假设该数据可以预先送入连续的内存区域,然后让send函数来获得的第一个地址,这一块连续的内存区就能完成传输数据.文 ...