gpt4 book ai didi

sql - 如何在 T-SQL 中针对特定值创建这个特殊计数器?

转载 作者:行者123 更新时间:2023-12-03 02:01:17 24 4
gpt4 key购买 nike

我遇到了一个困扰我好几个小时的问题。我正在尝试在临时表的列上创建一个特殊计数器,我的表有很多列,其中之一是 col1:

col1 |
######
X |
X |
A |
B |
X |
C |
X |
D |

特殊计数器应该是这样的:

col1 | counter
###############
X | 1
X | 2
A | 2
B | 2
X | 3
C | 3
X | 4
D | 4

它应该只计算“X”值,并保持不变,以防该值是其他值。

我尝试了很多方法,最接近的方法是创建另一个仅包含计数器的临时表,然后将其与原始表连接起来,但结果是这样的:

col1 | counter
###############
X | 1
X | 2
A | NULL
B | NULL
X | 3
C | NULL
X | 4
D | NULL

那么,我怎样才能创建这个特殊的计数器呢?

最佳答案

CASE 内的 Row_Number() 应该可以解决问题。

您会注意到我添加了一个字段 ID 来维护序列。

Declare @YourTable table (ID int,col1 varchar(25))
Insert Into @YourTable values
(1,'X'),
(2,'X'),
(3,'A'),
(4,'B'),
(5,'X'),
(6,'C'),
(7,'X'),
(8,'D')

Select ID,Col1
,Counter = max(counter) over (Order By ID)
From (
Select ID
,col1
,counter = case when col1='X' then row_number() over (Partition By col1 Order by ID) else null end
From @YourTable
) A
Order By ID

返回

ID  Col1    Counter
1 X 1
2 X 2
3 A 2
4 B 2
5 X 3
6 C 3
7 X 4
8 D 4

关于sql - 如何在 T-SQL 中针对特定值创建这个特殊计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41575618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com