Есть ли способ обновить / выбрать данные в одном столбце, когда значение другого столбца появляется в MSSQL 2014? - PullRequest
0 голосов
/ 17 апреля 2019

Я знаю, что вопрос сам по себе немного запутанный, и я не уверен, как его сформулировать, поэтому я хотел бы привести несколько примеров, чтобы лучше объяснить мою проблему.

Сначала я хотел бы извлечь данные для проверки избаза данных приложения.Таким образом, извлеченные данные будут иметь следующий формат (ы) таблицы:

VAB MMO BeerfestCircle 1 NO = OM1, VAB MMO BeerfestCircle 2 NO = OM2, VAB MMO BeerfestOutdazzling 1 NO = OM3, VAB MMO BeerfestOutdazzling 2 NO = OM4, BOAR VAP EG SAM Blaster Out 1 NO = OG1, BOAR VAP EG SAM Blaster Out 2 NO = OG2, BOAR VAP EG SAM Blaster Cir 1 NO = OG3, BOAR VAP EG SAM Blaster Cir 2 NO = OG4

Первый сценарий:

GUID    Name                                Value  TimeStamp
----    --------------------------------    -----  ---------
1111    BOAR VAP EG SAM Blaster Out 1 NO     10      11:00
1111    BOAR VAP EG SAM Blaster Out 2 NO     20      11:00
1111    BOAR VAP EG SAM Blaster Cir 1 NO     30      11:00
1111    BOAR VAP EG SAM Blaster Cir 2 NO     40      11:00
1111    VAB MMO BeerfestCircle 1 NO          50      11:00
1111    VAB MMO BeerfestCircle 2 NO          60      11:00
1111    VAB MMO BeerfestOutdazzling 1 NO     70      11:00
1111    VAB MMO BeerfestOutdazzling 2 NO     80      11:00
2222    BOAR VAP EG SAM Blaster Out 1 NO     90      12:00
2222    BOAR VAP EG SAM Blaster Out 2 NO     100     12:00
2222    BOAR VAP EG SAM Blaster Cir 1 NO     110     12:00
2222    BOAR VAP EG SAM Blaster Cir 2 NO     120     12:00
2222    VAB MMO BeerfestCircle 1 NO          130     12:00
2222    VAB MMO BeerfestCircle 2 NO          140     12:00
2222    VAB MMO BeerfestOutdazzling 1 NO     150     12:00
2222    VAB MMO BeerfestOutdazzling 2 NO     160     12:00

Ожидаемый результат для первого сценария:

GUID    Name                               Value  TimeStamp
----   ---------------------------------   -----  ---------
1111    BOAR VAP EG SAM Blaster Out 1 NO    10      11:00
1111    BOAR VAP EG SAM Blaster Out 2 NO    20      11:00
1111    BOAR VAP EG SAM Blaster Cir 1 NO    30      11:00
1111    BOAR VAP EG SAM Blaster Cir 2 NO    40      11:00
2222    BOAR VAP EG SAM Blaster Out 1 NO    90      12:00
2222    BOAR VAP EG SAM Blaster Out 2 NO    100     12:00
2222    BOAR VAP EG SAM Blaster Cir 1 NO    110     12:00
2222    BOAR VAP EG SAM Blaster Cir 2 NO    120     12:00

2-й сценарий

GUID    Name                                Value  TimeStamp
----    --------------------------------    -----  ---------
1111    BOAR VAP EG SAM Blaster Out 1 NO     10      11:00
1111    BOAR VAP EG SAM Blaster Out 2 NO     20      11:00
1111    VAB MMO BeerfestCircle 1 NO          50      11:00
1111    VAB MMO BeerfestCircle 2 NO          60      11:00
1111    VAB MMO BeerfestOutdazzling 1 NO     70      11:00
1111    VAB MMO BeerfestOutdazzling 2 NO     80      11:00
2222    BOAR VAP EG SAM Blaster Out 1 NO     90      12:00
2222    BOAR VAP EG SAM Blaster Out 2 NO     100     12:00
2222    BOAR VAP EG SAM Blaster Cir 1 NO     110     12:00
2222    BOAR VAP EG SAM Blaster Cir 2 NO     120     12:00
2222    VAB MMO BeerfestCircle 1 NO          130     12:00
2222    VAB MMO BeerfestCircle 2 NO          140     12:00
2222    VAB MMO BeerfestOutdazzling 1 NO     150     12:00
2222    VAB MMO BeerfestOutdazzling 2 NO     160     12:00

Ожидаемый результат для 2-го сценария:

GUID    Name                               Value  TimeStamp
----   ---------------------------------   -----  ---------
1111    BOAR VAP EG SAM Blaster Out 1 NO    10      11:00
1111    BOAR VAP EG SAM Blaster Out 2 NO    20      11:00
1111    VAB MMO BeerfestOutdazzling 1 NO    70      11:00
1111    VAB MMO BeerfestOutdazzling 2 NO    80      11:00
2222    BOAR VAP EG SAM Blaster Out 1 NO    90      12:00
2222    BOAR VAP EG SAM Blaster Out 2 NO    100     12:00
2222    BOAR VAP EG SAM Blaster Cir 1 NO    110     12:00
2222    BOAR VAP EG SAM Blaster Cir 2 NO    120     12:00

Из таблиц значения BOAR (s) всегда будут отображаться после запроса, если нет значений BOAR, тогда для замены значений BOAR (s) потребуются значения VAB (s). Если значения BOAR (s) или VAB (s) отсутствуют, записи не будут показаны. Любая предоставленная помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 апреля 2019

Рассмотрите возможность использования row_number. Это решение предполагает, что X - это всегда три позиции от последнего символа.

select guid, name, value, timestamp
from (
   select *, 
      row_number() over (partition by guid, substring(name, len(name)-3,1) order by name) rn
   from data
) t
where rn = 1

DBFIDDLE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...