我想根據 A 列中的值以及 B 列和 C 列之間的比較來填充列 New。我希望列 New 從一開始就具有初始值=1,并在行中保留記憶體,但要重置在某些條件下為 1。
New 設定為 1 作為初始值。
讓我們看一下第 3 行:由于 A=40>30 且 B=C,那么 New=New 1=2,因為上面第 2 行中的 New=1。
讓我們看第 6 行:由于 A=40>30 且 B<>C,則 New=1(從頭開始計數)。
創建稍后將在其中操作 New 的初始表:
CREATE TABLE table_20220112
(
Ordered_by int,
A float,
B nvarchar(100) ,
C nvarchar(100),
New int,
);
INSERT INTO table_20220112
VALUES
(1,10,'Apples','Apples',0),
(2,5,'Apples','Apples',0),
(3,40,'Apples','Apples',0),
(4,10,'Apples','Apples',0),
(5,50,'Apples','Apples',0),
(6,40,'Oranges','Apples',0),
(7,10,'Oranges','Apples',0),
(8,25,'Oranges','Bananas',0);
select * from table_20220112
--drop table table_20220112
代碼邏輯是這樣的(我不知道相應的 SQL 語法):
New=1 (initail value before going in a looping down all rows)
If A<=30 Then
IF B=C Then New=New
Else if B<>C Then New=1
Else If A>30 Then
IF B=C Then New=New 1
Else if B<>C Then New=1
END IF
期望的結果:
| 訂購 | 一個 | 乙 | C | 新的 |
|---|---|---|---|---|
| 1 | 10 | 蘋果 | 蘋果 | 1 |
| 2 | 5 | 蘋果 | 蘋果 | 1 |
| 3 | 40 | 蘋果 | 蘋果 | 2 |
| 4 | 10 | 蘋果 | 蘋果 | 2 |
| 5 | 50 | 蘋果 | 蘋果 | 3 |
| 6 | 40 | 橘子 | 蘋果 | 1 |
| 7 | 10 | 橘子 | 蘋果 | 1 |
| 8 | 25 | 橘子 | 香蕉 | 1 |
uj5u.com熱心網友回復:
使用遞回 cte 并使用CASE運算式實作該邏輯
with rcte as
(
select Ordered_by, A, B, C, New = 1
from #table_20220112
where Ordered_by = 1
union all
select t.Ordered_by, t.A, t.B, t.C,
New = case when t.A <= 30
then case when t.B = t.C then r.New else 1 end
when t.A > 30
then case when t.B = t.C then r.New 1 else 1 end
end
from rcte r
inner join #table_20220112 t on r.Ordered_by = t.Ordered_by - 1
)
select *
from rcte
order by Ordered_by
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410557.html
標籤:
