Есть ли способ посмотреть предыдущую оценку в выражении CASE? - PullRequest
0 голосов
/ 05 августа 2020

В качестве примера я создал следующую таблицу в Excel. Я хотел бы сделать аналогичное выражение (например, формулу, показанную в Excel) в SQL Server на похожей таблице. Столбцы row_num и switch уже были созданы на основе предыдущих операторов CASE.

Щелкните, чтобы открыть лист Excel

Есть ли способ добиться этого?

Спасибо, что посмотрели!

PS: если изображение не работает:

EXCEL     |   A    |    B   |   C   | 
1         |row_num | switch | group |
2         | 1      | 0      | 1     |
3         | 2      | 1      | 1     |
4         | 3      | 1      | 1     |
5         | 4      | 0      | 2     |
6         | 5      | 0      | 3     |
7         | 6      | 1      | 3     |
8         | 7      | 1      | 3     |
9         | 8      | 0      | 4     |
10        | 1      | 0      | 5     |
11        | 2      | 1      | 5     |
12        | 3      | 0      | 6     |
13        | 4      | 1      | 6     |

Formula on cell C3: IF(B3=1;C2;C2+1) (etc)

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Я думаю, что сумма окна делает то, что вы хотите:

select
    t.*,
    sum(case when switch = 0 then 1 else 0 end) over(order by excel_row) grp
from mytable t

Если у вас всегда есть 0 / 1 значения в столбце switch, то это можно упростить:

select
    t.*,
    sum(1 - switch) over(order by excel_row) grp
from mytable t
0 голосов
/ 05 августа 2020

Вам нужна совокупная сумма случаев, когда switch = 0.

Однако SQL таблицы представляют неупорядоченные наборы. Итак, вам нужен столбец (или несколько столбцов), в котором указан порядок. В вашем примере вы можете использовать номер строки Excel, но ваши данные могут иметь более подходящий столбец.

Следовательно:

select t.*,
       sum(case when switch = 0 then 1 else 0 end) over (order by excel_row) as grouping
from t;

Если switch принимает только два значения, вы можно упростить это до:

select t.*,
       sum(1 - switch) over (order by excel_row) as grouping
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...