示例输入:
身份证 | 瓦尔斯 |
---|---|
1 | 产品 |
2 | 牛奶 |
3 | 黄油 |
4 | 奶酪 |
5 | 酸奶 |
6 | 产品 |
7 | 麦片 |
8 | 粥 |
9 | 产品 |
10 | 香蕉 |
示例输出:
身份证 | 瓦尔斯 | 排名 |
---|---|---|
1 | 产品 | 1 |
2 | 牛奶 | 1 |
3 | 黄油 | 1 |
4 | 奶酪 | 1 |
5 | 酸奶 | 1 |
6 | 产品 | 2 |
7 | 麦片 | 2 |
8 | 粥 | 2 |
9 | 产品 | 3 |
10 | 香蕉 | 3 |
这看起来像一个条件累积和:
select t.*,
sum(case when vals = 'Product' then 1 else 0
end) over (order by id) as ranking
from t
order by id;
您还可以使用窗口函数:
SELECT * , SUM(CASE WHEN Vals ='Product' THEN 1 END) OVER (ORDER BY id) ranking
FROM tableName
假设您的表格是按 ID 排序的:
SELECT T.ID,
T.Vals,
(SELECT COUNT(DISTINCT ID) FROM table WHERE Vals = 'Product' AND ID <= T.ID) as Rank
FROM table T
我尝试了一下,发现解决方案如下:
使用排名数据 AS ( 选择 ID, 瓦尔斯, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum, CASE WHEN Vals = '产品' THEN 1 ELSE 0 END AS IsProduct 从 RankingPuzzIe -- 将 'YourTableName' 替换为您的实际表名称 ) 选择 ID, 瓦尔斯, 行号, 是产品, SUM(IsProduct) OVER (ORDER BY RowNum) AS 排名 从 排名数据 订购依据 身份证;