我有一个包含两列的表,我想计算 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 相同的行数
我假设一般聚合如下:
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
你不就是在
MIN
和COUNT
之后吗:
SELECT Col_A, MIN(Col_B) AS Col_B, COUNT(*) AS count
FROM MyTable
GROUP BY Col_A;