2017-08-02 138 views
0

我试图选择不同的DP,RN,并从结果中选择只有结果在表'EDate'= value中的另一个列,然后获取行数。这是我迄今为止,但它不工作..Sql Select Distinct Row Count

SELECT 
    COUNT(*) AS eCount 
FROM 
    (SELECT * 
    FROM 
     (SELECT DISTINCT 
       DP, RN 
      FROM 
       ECount 
      WHERE 
       DType = 'STRUCT') 
    WHERE 
     Month(EDate) = '07')) AS rows 

在这种情况下,建议我不能EDate,因为我不希望添加到Select Distinct搞乱我的不同选择。

例如

DP  RN  Edate  
DP01 RN01 21/06/2017  
DP01 RN01 22/07/2017 
DP02 RN03 22/07/2017 yes 
DP02 RN03 22/07/2017  
DP01 RN04 22/07/2017 yes 
DP02 RN05 22/07/2017 yes 
DP03 RN06 22/07/2017 yes 

结果应该= 4

+1

请你添加一些数据的例子吗?我试图更好地理解你的问题 – Fmanin

+0

@Fmanin请参阅示例 – Ryan

+0

从哪里来:'DType ='STRUCT''来自哪里? – Fmanin

回答

1

不能在外部查询以来EDate使用WHERE Month(EDate) = '07'不是内部查询的一部分。

有一个派生表少尝试:

SELECT COUNT(*) 
FROM 
(
    SELECT DISTINCT DP, RN 
    FROM ECount t0 
    WHERE DType = 'STRUCT' 
    AND Month(EDate) = 7 
    AND NOT EXISTS 
    (
     SELECT 1 
     FROM ECount t1 
     WHERE t1.DP = t0.DP 
     AND t1.RN = t0.RN 
     AND t1.Month(EDate) <> 7 
     AND t1.DType = 'STRUCT' -- Not sure about this condition 
    ) 
) As rows 
+0

@ Zohar,请看我的例子。我有你的建议的问题是将拿起DP01 RN01 22/07/2017在我的名单,但因为它不是独特的表中我不想拿起它,如果这是有道理的.. – Ryan

+0

我已经在派生表中添加了'not exists'条件。检查是否有帮助。 –

0
;With Cte 
As 
(
    Select 
     DP, 
     RN, 
     EDate, 
     Row_Number() Over(Partition By DP Order By RN Desc) As RowNum 
    From Example 
    Where Month(EDate) = 07 
) 
Select 
    DP, 
    RN, 
    EDate 
From Cte 
Where RowNum = 1 
Order By DP; 
+0

我刚刚意识到我犯了一个错误与我的例子,我不介意如果该行不止一次存在,我只是想这一次发生。但是,如果有超过1个存在,并从上个月,那么我想排除这两个。 – Ryan