Какой цикл я должен использовать для такого рода данных в SQL Server? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть список данных с 3 столбцами Status, Next Status и Default (0,1).Как я могу перебрать данные и получить последний статус, где Default = 1.

Это моя таблица выглядит так.

ID        Status    Next Status    Default
--------------------------------
 1          PASS       FAIL           0
 2          PASS       HOLD           0
 3          PASS       RELE           1
 4          FAIL       EXEM           0
 5          FAIL       HOLD           1
 6          HOLD       RELE           0
 7          RELE       HOLD           0
 8          RELE       CANC           0

Пример my Status равен PASS, сейчасон зациклится в таблице и проверит, какой будет последний статус по умолчанию = 1.

Samle1: PASS - RELE - 1

Поскольку RELE в следующем состоянии, он будет смотреть на RELE.

RELE CANC 0, когда следующим статусом по умолчанию станет 0, тогда он получит RELE.

1 Ответ

0 голосов
/ 13 июня 2019

У меня есть список данных с 3 столбцами Статус, Следующий статус и По умолчанию (0,1). Как я могу просмотреть данные и получить последний статус где по умолчанию = 1.

Вот так выглядит мой стол.

Status    Next Status    Default
--------------------------------
PASS       FAIL           0
PASS       HOLD           0
PASS       RELE           1
FAIL       EXEM           0
FAIL       HOLD           1
HOLD       RELE           0
RELE       HOLD           0
RELE       CANC           0

Пример моего статуса - PASS, теперь он будет отображаться в таблице и проверять какой будет последний статус по умолчанию = 1.

Samle1: PASS - RELE - 1

Поскольку RELE в следующем статусе, он будет смотреть на RELE.

RELE CANC 0, когда следующий статус по умолчанию станет 0, тогда он получит RELE.

Я не уверен, правильно ли я понимаю требование.

Вот мое понимание: для любого данного статуса вам нужно выяснить его предыдущий статус (если есть), который имел значение по умолчанию = 1. И я понимаю, что значение столбца «status» - это предыдущий статус данного значения столбца «следующий статус» подряд. Пожалуйста, поправьте меня, если мое понимание неверно.

С этим пониманием, вот 2 запроса в зависимости от того, что вы вводите в эту программу:

  1. Статус будет входом для запроса? Если так:
    SELECT  DISTINCT
            S.Status
            ,LastStatus = OA.Status 
    FROM    Status S
            OUTER APPLY (
                            SELECT  TOP 1 SI.Status
                            FROM    Status SI
                            WHERE   SI.[Next Status] = S.Status
                            AND     SI.Default = 1
                        ) OA
    WHERE   S.Status = '<input status name>';
    
    2> Если вам нужно получить это для каждого состояния, доступного в столбце состояния стол, то:
    SELECT  DISTINCT
            S.Status
            ,LastStatus = OA.Status 
    FROM    Status S
            OUTER APPLY (
                            SELECT  TOP 1 SI.Status
                            FROM    Status SI
                            WHERE   SI.[Next Status] = S.Status
                            AND     SI.Default = 1
                        ) OA;
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...