SQL 删除重复行并返回其计数

问题描述 投票:0回答:2

我有一个包含两列的表,我想计算 Col_A 上的不同值,并返回 Col_A 的不同值(同时将其余列完好无损地保留在那里作为响应)

我的桌子

Col_A | B栏
一个 | 1
一个 | 1
一个 | 2
一个 | 3
乙| 4
乙| 4
乙| 5

预期结果

Col_A | Col_B |数数
一个 | 1 | 4
乙| 4 | 3
 

我尝试了以下代码

select *,   ROW_NUMBER() OVER (partition by Col_A ORDER BY Col_A )  from MyTable

它不起作用(Col_B 值不敬)

我已经确保该项目是唯一的(仅从具有相同 Col_A 的项目组中选择第一个条目)但是我还必须计算 Col_A 相同的行数

sql-server t-sql common-table-expression
2个回答
0
投票

我假设一般聚合如下:

select A, MIN(B), COUNT(*)
FROM yourtable
GROUP BY A

在这里不起作用,例如,如果您有超过 2 列。

这样做的方法是窗口聚合+ row_number,类似于:

SELECT  *
FROM    (
    SELECT  *
    ,   row_number() OVER(PARTITION BY Col_A ORDER BY Col_b) AS sort
    ,   COUNT(*) OVER(PARTITION BY Col_A) AS cnt
    FROM    (
        VALUES  (N'A', 1)
        ,   (N'A', 1)
        ,   (N'A', 2)
        ,   (N'A', 3)
        ,   (N'b', 4)
        ,   (N'b', 4)
        ,   (N'b', 5)
    ) t (Col_A,[Col_B])
    ) x
WHERE   x.sort = 1

0
投票

你不就是在

MIN
COUNT
之后吗:

SELECT Col_A, MIN(Col_B) AS Col_B, COUNT(*) AS count
FROM MyTable
GROUP BY Col_A;
© www.soinside.com 2019 - 2024. All rights reserved.