2017-08-02 176 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