2015-12-02 41 views
3
ProjID Dno RNo Status  DateApproved 
    100 1 1 Initiated 2014-12-31 09:15:58.000 
    100 1 1 Approved 2015-01-31 09:15:58.000 
    100 1 1 Approved 2015-02-01 09:15:58.000 
    100 1 1 Approved 2015-05-28 09:15:58.000 
    100 1 1 Approved 2015-06-20 09:15:58.000 
    101 1 1 Approved 2014-12-31 09:15:58.000 
    101 1 1 Approved 2015-01-31 09:15:58.000 
    101 1 1 Approved 2015-02-01 09:15:58.000 
    101 1 1 Approved 2015-05-28 09:15:58.000 
    101 1 1 Approved 2015-08-20 09:15:58.000 

在上面的示例中,我必须为每个投影获取max(Dateapproved)作为Dateapproved。 如果所有版本状态在特定组中被批准,例如:project id = 101,其组中的所有行都具有状态为Approved,所以我必须获取最大日期:'2015-08-20 09:15:58.000 '但是对于Projectid = 100,一个状态仍处于启动状态,所以我们必须显示Null为Dateapproved。根据条件在组中获取最大值

由于提前

我的输出应该是这样的:

ProjId Dno Rno DateApproved 
100  1 1 NUll 
101  1 1 2015-08-20 09:15:58.000 

示例代码:

Create table #temp(
ProjectID varchar(35), 
Documentno int, 
Revisionno int, 
Status varchar(35), 
DateApproved Datetime) 

insert into #temp values ('100', 1, 1, 'Initiated','2014-12-31 09:15:58') 
insert into #temp values ('100', 1, 1, 'Approved','2015-01-31 09:15:58 ') 
insert into #temp values ('100', 1, 1, 'Approved','2015-02-01 09:15:58 ') 
insert into #temp values ('100', 1, 1, 'Approved','2015-05-28 09:15:58 ') 
insert into #temp values ('100', 1, 1, 'Approved','2015-06-20 09:15:58 ') 


insert into #temp values ('101', 1, 1, 'Approved','2014-12-31 09:15:58 ') 
insert into #temp values ('101', 1, 1, 'Approved','2015-01-31 09:15:58 ') 
insert into #temp values ('101', 1, 1, 'Approved','2015-02-01 09:15:58 ') 
insert into #temp values ('101', 1, 1, 'Approved','2015-05-28 09:15:58 ') 
insert into #temp values ('101', 1, 1, 'Approved','2015-08-20 09:15:58 ') 


select * from #temp 
+0

您能否提供您的愿望输出以匹配您的数据样本?您的问题描述非常模糊。也请阅读[** How to ask **](http://stackoverflow.com/help/how-to-ask) \t \t \t \t [**如何创建一个最小,完整和可验证的示例。 **](http://stackoverflow.com/help/mcve) –

回答

2

试试这个:

SELECT T.ProjectID, 
     Documentno as Dno, 
     Revisionno as RNo, 
     CASE WHEN SUM(CASE WHEN T.Status <> 'Approved' THEN 1 ELSE 0 END) = 0 
      THEN Max(T.DateApproved) ELSE NULL 
     END as DateApproved 
from #temp T 
GROUP BY T.ProjectId, Documentno , Revisionno 

当针对您的测试数据运行时,会给出以下输出:

PROJECT ID DNo TNo DateApproved 
100   1  1  NULL 
101   1  1  2015-08-20 09:15:58.000 
+0

谢谢CSL它工作:) – SuperKings

1

您可以使用case语句和条件聚合来执行此操作。使用COUNT(NULLIF(Status, 'Approved'))获取非Approved的状态计数。如果这是0,则获得批准的最大日期:

SELECT ProjectID, 
     DateApproved = CASE WHEN COUNT(NULLIF(Status, 'Approved')) = 0 THEN MAX(DateApproved) END 
FROM #Temp 
GROUP BY ProjectID; 
+0

感谢GarethD它工作:) – SuperKings