2016-07-27 75 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

相关问题