Sql server 特定列的行数,并与最后一行一起显示
我必须对一列中相同值的行进行计数,并显示最后一列的计数值。下面是我的情景 表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 A列B列C列 a 1 a1 a 2 a2 a 3 a3 a4 a 5 a5 a 6 a6 b 7 a7 b 8 a8 b 9 a9 b 10 a10 e 7 a11 E1A12 e 4 a13 在显示数据时,我应在列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 列A列B列C列D a 1 a1 a 2 a2 a 3 a3 a4 a 5 a5 a 6 a6 6 b 7 a7 b 8 a8 b 9 a9 b 10 a10 4 e 7 a11 E1A12 e 4 a13 3Sql server 特定列的行数,并与最后一行一起显示,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我必须对一列中相同值的行进行计数,并显示最后一列的计数值。下面是我的情景 表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
谢谢,这是一种方法。Lead()用于检查这是否是集合的最后一行,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
您可以检查行数是否等于count()over(),如果是,则显示计数
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
SQL 2008有
行编号()
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
输出
编辑v2.0:这可能也会起作用,不需要加入
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
为什么?最好在前端执行此操作。这是为了进行自动化测试和验证数据。将当前结果粘贴到Excel并在Excel中执行会更容易。感谢JamesZ的输入,我刚刚意识到我们正在使用SQL Server 2008:-(@Gaurav你也可以用row_号来回答,谢谢你Juan和我尝试了这个查询,结果成功了。