Spa*_*cko 6 sql t-sql sql-server sql-order-by
我正在尝试使用SQL查询执行高级订单
我有一个数据库,用于跟踪工作流程及其相关活动
之前的活动(已完成)处于closed州内.他们有一套Active_Date和Closed_Date一套
目前的活动处于一个active州.有一个Active_Date组,但Closed_Date为NULL
每个州ECR.item_number只有一项活动active
我想订购
ECR.item_number但我希望订单基于该active州的哪些活动按降序排列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)
在这种情况下,我发现 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上的简单演示