2016-07-27 73 views
-1

我必須計算列中相同值的行數,並顯示最後一列的計數值。下面是我的方案特定列的行數和最後一行的顯示數

表1

Col_A Col_B Col_C 
a  1  a1 
a  2  a2 
a  3  a3 
a  4  a4 
a  5  a5 
a  6  a6 
b  7  a7 
b  8  a8 
b  9  a9 
b  10  a10 
e  7  a11 
e  1  a12 
e  4  a13

而顯示數據,我應該算在爲col_a相同的值,並顯示如下圖所示

Col_A Col_B Col_C Col_D 
a  1  a1 
a  2  a2 
a  3  a3 
a  4  a4 
a  5  a5 
a  6  a6  6 
b  7  a7 
b  8  a8 
b  9  a9 
b  10  a10  4 
e  7  a11 
e  1  a12 
e  4  a13  3

感謝,

+0

爲什麼?在前端做這件事會更好。 –

+1

這是要進行自動化測試並驗證數據 – Gaurav

+0

將當前結果粘貼到Excel並在此處執行會更容易。 –

回答

0

你可以檢查,看看是否ROW_NUMBER等於在(計數()),如果是顯示計數

SELECT [Col_A], 
     [Col_B], 
     [Col_C], 
     (CASE WHEN ROW_NUMBER() OVER (PARTITION BY [Col_A] ORDER BY [Col_B]) = COUNT(*) OVER (PARTITION BY COL_A) 
      THEN COUNT(*) OVER (PARTITION BY COL_A) END) AS Col_D 
FROM Table1 
+0

我。謝謝JamieD77 – Gaurav

0

這是一種方式去做吧。鉛()來檢查,如果這是一組的最後一行,並ROW_NUMBER用來計算行量:使用反向行號應太

select Col_A, Col_B, Col_C, case when isnull(NextA,'') != Col_A then RN end 
from (
    select 
    *, 
    row_number() over (partition by Col_A order by Col_C) as RN, 
    lead(Col_A) over (order by Col_A, Col_C) as NextA 
    from Table1 
) X 

爲2008:

select Col_A, Col_B, Col_C, case when RN2 = 1 then RN end 
from (
    select 
    *, 
    row_number() over (partition by Col_A order by Col_C asc) as RN, 
    row_number() over (partition by Col_A order by Col_C desc) as RN2 
    from Table1 
) X 
+0

謝謝JamesZ的輸入,我剛剛意識到我們在SQL Server 2008中:-( – Gaurav

+0

@Gaurav不酷:( –

+0

@Gaurav那麼你也可以用row_number來做到這一點,並補充說,回答這個邏輯工作 –

0

SQL 2008有ROW_NUMBER()

DEMO

SELECT X.*, (CASE WHEN rn=1 THEN total END) as count_A 
FROM (SELECT Col_A, 
       Col_B, 
       Col_C, 
       row_number() over 
       (partition by Col_A order by Col_C DESC) as rn 
     from test 
    ) X 
join (
     SELECT [Col_A] , 
       count([Col_A]) as total 
     FROM test GROUP BY [Col_A] 
    ) Y 
    ON X.[Col_A] = Y.[Col_A] 
ORDER BY X.Col_A,   
     X.Col_C 

輸出

enter image description here

編輯V2.0:這大概應太和犯規需要JOIN

SELECT X.*, 
     (CASE WHEN rn=1 
      THEN MAX(rn) OVER (partition BY X.col_a) 
     END) as count_A 
FROM (SELECT Col_A, 
       Col_B, 
       Col_C, 
       row_number() over (partition by Col_A order by Col_C DESC) as rn 
     from test 
    ) X 
ORDER BY X.Col_A,   
     X.Col_C 
+0

謝謝胡安和我試過這個查詢,它的工作。 – Gaurav

相關問題