Как увеличить номер группировки в запросе, если последовательные значения не удовлетворяют определенным условиям? - PullRequest
1 голос
/ 04 февраля 2020

Я кратко опишу проблему.

 ----------------------------------------------------------------------------------------------------
|  Total   UnitName    UnitValue  PartlyStatus   PartlyValue   CountMetric    CountValue   |   RowNo    
|                                                                                          |  
|   79        A           7654         B               0            C             360      |     1      
|   79        A           7656         B               0            C             360      |     2      
|   79        A           7657         B               0            C             360      |     2      
|   79        A           7658         B               0            C             360      |     2      
|   79        A           7659         B               1            C             240      |     3      
|   79        A           7660         B               0            C             360      |     4      
|   79        A           7662         B               1            C             240      |     5      
|   79        A           7663         B               1            C             240      |     5      
|   79        A           7664         B               1            C             240      |     5      
|   79        A           7665         B               1            C             240      |     5      
|   79        A           7667         B               1            C             240      |     6      
|   79        A           7668         B               1            C             240      |     6      
|   79        A           7669         B               1            C             240      |     6      
|   79        A           7670         B               0            C             360      |     7      
|   79        A           7671         B               0            C             360      |     7      
|   79        A           7672         B               0            C             360      |     7      
  ---------------------------------------------------------------------------------------------------

Мне нужно создать новую строку в моей таблице в SQL Службы отчетов сервера (SSRS), если ограничение не выполняется.

Правила, которые я должен применить:

Если номера UnitValue не являются последовательными, используйте следующую строку.
Если двоичные значения partlyValue изменяются, используйте следующую строку.

Мне нужно написать запрос, который создает RowNo, который увеличивается, если условия не удовлетворены.

Таблица, которую я показываю, является производным результатом длинного запроса для демонстрации проблемы. Столбец RowNo написан для того, чтобы показать намеченный результат.

Мой вопрос задают для понимания и размышления об элегантных подходах к решению проблемы, поэтому концептуальные примеры запросов или решения хороши для меня, если они направляют меня в правильном направлении. .

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Я думаю, вы просто хотите оконные функции. Немного трудно следовать логике c, но это делает то, что вы хотите:

select t.*,
       sum(case when prev_uv = unitvalue - 1 and
                     prev_pv = partlyvalue
                then 0  -- no new group
                else 1
           end) over (order by unitvalue) as rowno 
from (select t.*,
             lag(unitvalue) over (order by unitvalue) as prev_uv,
             lag(partlyvalue) over (order by unitvalue) as prev_pv
      from t
     ) t;
0 голосов
/ 04 февраля 2020

Вам нужно написать функции в вашем обозревателе решений.

...