高级SQL Server排序依据

Spa*_*cko 6 sql t-sql sql-server sql-order-by

我正在尝试使用SQL查询执行高级订单

我有一个数据库,用于跟踪工作流程及其相关活动

之前的活动(已完成)处于closed州内.他们有一套Active_DateClosed_Date一套

目前的活动处于一个active州.有一个Active_Date组,但Closed_DateNULL

每个州ECR.item_number只有一项活动active

我想订购

  1. ECR.item_number但我希望订单基于该active州的哪些活动按降序排列
  2. A.ACTIVE_DATE

查询:

SELECT 
    ECR.item_number,
    ECR.title,
    convert(VARCHAR(10),ECR.CREATED_ON,120) AS [Date CR Created],
    convert(VARCHAR(10),A.ACTIVE_DATE,120) AS [Activity Activated],
    convert(VARCHAR(10),A.CLOSED_DATE,120) AS [Activity Closed],
    A.STATE,
    A.NAME AS [Activity Name],

    (CASE
        WHEN 
            (A.STATE='Closed')
        THEN 
            DATEDIFF(DAY, A.ACTIVE_DATE, A.CLOSED_DATE)      
    END) AS [DAYS ACTIVITY (WAS) OPEN],

    (CASE
        WHEN 
            (A.STATE='Active')
        THEN 
            DATEDIFF(DAY, A.ACTIVE_DATE, Getdate())
    END) AS [DAYS ACTIVITY HAS BEEN OPEN]

FROM 
    innovator.ecr AS ECR
    INNER JOIN innovator.workflow AS WF 
        ON CR.id = WF.source_id
    INNER JOIN innovator.workflow_process AS WFP 
        ON WF.related_id = WFP.id
    INNER JOIN innovator.workflow_process_activity AS WPA 
        ON WFP.id = WPA.source_id
    INNER JOIN innovator.activity AS A 
        ON WPA.related_id = A.id

--Shown for clarity
ORDER BY
    ECR.ITEM_NUMBER,
    [Activity Activated]
Run Code Online (Sandbox Code Playgroud)

样本返回数据

|-----------+-----------+-------------------+-----------------------+-----------------------+-------------------+-------------------------------+-------------------------------|
|CR Number  |   Title   |   Date CR Created |   Activity Name       |   Activity Activated  |   Activity Closed |   DAYS ACTIVITY (WAS) OPEN    |   DAYS ACTIVITY HAS BEEN OPEN |
|-----------+-----------+-------------------+-----------------------+-----------------------+-------------------+-------------------------------+-------------------------------|
|CR-000119  |   ITEM 1  |   4/12/2012       |   Submit CR           |   4/12/2012           |   31/01/2013      |   58                          |   0                           |
|CR-000119  |   ITEM 1  |   4/12/2012       |   Check CR            |   31/01/2013          |   13/02/2013      |   13                          |   0                           |
|CR-000119  |   ITEM 1  |   4/12/2012       |   Review CR           |   13/02/2013          |   21/02/2013      |   8                           |   0                           |
|CR-000119  |   ITEM 1  |   4/12/2012       |   Technical Review    |   21/02/2013          |   28/02/2013      |   7                           |   0                           |
|CR-000119  |   ITEM 1  |   4/12/2012       |   CRB Meeting         |   28/02/2013          |   NULL            |   NULL                        |   11                          |
|CR-000123  |   ITEM 2  |   6/12/2012       |   Check CR            |   6/12/2012           |   21/12/2012      |   15                          |   0                           |
|CR-000123  |   ITEM 2  |   6/12/2012       |   Submit CR           |   6/12/2012           |   6/12/2012       |   0                           |   0                           |
|CR-000123  |   ITEM 2  |   6/12/2012       |   Review CR           |   21/12/2012          |   17/01/2013      |   27                          |   0                           |
|CR-000123  |   ITEM 2  |   6/12/2012       |   Technical Review    |   17/01/2013          |   6/03/2013       |   48                          |   0                           |
|CR-000123  |   ITEM 2  |   6/12/2012       |   CRB Meeting         |   6/03/2013           |   NULL            |   NULL                        |   5                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Submit CR           |   11/01/2013          |   15/01/2013      |   4                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Check CR            |   15/01/2013          |   16/01/2013      |   1                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Review CR           |   16/01/2013          |   21/01/2013      |   5                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Technical Review    |   21/01/2013          |   25/01/2013      |   4                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   CRB Meeting         |   25/01/2013          |   31/01/2013      |   6                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Technical Review    |   31/01/2013          |   27/02/2013      |   27                          |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   CRB Meeting         |   27/02/2013          |   NULL            |   NULL                        |   12                          |
|-----------+-----------+-------------------+-----------------------+-----------------------+-------------------+-------------------------------+-------------------------------|
Run Code Online (Sandbox Code Playgroud)

期望的结果

|-----------+-----------+-------------------+-----------------------+-----------------------+-------------------+-------------------------------+-------------------------------|
|CR Number  |   Title   |   Date CR Created |   Activity Name       |   Activity Activated  |   Activity Closed |   DAYS ACTIVITY (WAS) OPEN    |   DAYS ACTIVITY HAS BEEN OPEN |
|-----------+-----------+-------------------+-----------------------+-----------------------+-------------------+-------------------------------+-------------------------------|
|CR-000136  |   ITEM 3  |   11/01/2013      |   Submit CR           |   11/01/2013          |   15/01/2013      |   4                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Check CR            |   15/01/2013          |   16/01/2013      |   1                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Review CR           |   16/01/2013          |   21/01/2013      |   5                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Technical Review    |   21/01/2013          |   25/01/2013      |   4                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   CRB Meeting         |   25/01/2013          |   31/01/2013      |   6                           |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   Technical Review    |   31/01/2013          |   27/02/2013      |   27                          |   0                           |
|CR-000136  |   ITEM 3  |   11/01/2013      |   CRB Meeting         |   27/02/2013          |   NULL            |   NULL                        |   12                          |
|CR-000119  |   ITEM 1  |   4/12/2012       |   Submit CR           |   4/12/2012           |   31/01/2013      |   58                          |   0                           |
|CR-000119  |   ITEM 1  |   4/12/2012       |   Check CR            |   31/01/2013          |   13/02/2013      |   13                          |   0                           |
|CR-000119  |   ITEM 1  |   4/12/2012       |   Review CR           |   13/02/2013          |   21/02/2013      |   8                           |   0                           |
|CR-000119  |   ITEM 1  |   4/12/2012       |   Technical Review    |   21/02/2013          |   28/02/2013      |   7                           |   0                           |
|CR-000119  |   ITEM 1  |   4/12/2012       |   CRB Meeting         |   28/02/2013          |   NULL            |   NULL                        |   11                          |
|CR-000123  |   ITEM 2  |   6/12/2012       |   Check CR            |   6/12/2012           |   21/12/2012      |   15                          |   0                           |
|CR-000123  |   ITEM 2  |   6/12/2012       |   Submit CR           |   6/12/2012           |   6/12/2012       |   0                           |   0                           |
|CR-000123  |   ITEM 2  |   6/12/2012       |   Review CR           |   21/12/2012          |   17/01/2013      |   27                          |   0                           |
|CR-000123  |   ITEM 2  |   6/12/2012       |   Technical Review    |   17/01/2013          |   6/03/2013       |   48                          |   0                           |
|CR-000123  |   ITEM 2  |   6/12/2012       |   CRB Meeting         |   6/03/2013           |   NULL            |   NULL                        |   5                           |
|-----------+-----------+-------------------+-----------------------+-----------------------+-------------------+-------------------------------+-------------------------------|
Run Code Online (Sandbox Code Playgroud)

Ale*_*nko 2

在这种情况下,我发现 ECR.item_number 处于活动状态,并通过 MAX() OVER () 子句将该日期分配给整个组 ECR.item_number。对 SELECT 语句中位置编号为 10 的新列进一步排序(升序)。您还可以使用别名作为排序列,而不是 SELECT 语句中的位置 10 的编号

SELECT ECR.item_number,
       ECR.title,
       convert(VARCHAR(10),ECR.CREATED_ON,120) AS [Date CR Created],
       convert(VARCHAR(10),A.ACTIVE_DATE,120) AS [Activity Activated],
       convert(VARCHAR(10),A.CLOSED_DATE,120) AS [Activity Closed],
       A.STATE,
       A.NAME AS [Activity Name],
    (CASE WHEN (A.STATE='Closed')
          THEN DATEDIFF(DAY, A.ACTIVE_DATE, A.CLOSED_DATE)      
     END) AS [DAYS ACTIVITY (WAS) OPEN],
    (CASE WHEN (A.STATE='Active')
        THEN DATEDIFF(DAY, A.ACTIVE_DATE, Getdate())
     END) AS [DAYS ACTIVITY HAS BEEN OPEN],
     MAX(CASE WHEN A.CLOSED_DATE IS NULL THEN A.ACTIVE_DATE END) OVER (PARTITION BY ECR.item_number)
FROM innovator.ecr AS ECR
    INNER JOIN innovator.workflow AS WF 
        ON CR.id = WF.source_id
    INNER JOIN innovator.workflow_process AS WFP 
        ON WF.related_id = WFP.id
    INNER JOIN innovator.workflow_process_activity AS WPA 
        ON WFP.id = WPA.source_id
    INNER JOIN innovator.activity AS A 
        ON WPA.related_id = A.id
ORDER BY 10 ASC, ECR.ITEM_NUMBER, A.ACTIVE_DATE ASC
Run Code Online (Sandbox Code Playgroud)

SQLFiddle上的简单演示