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

#sql #sql-server

#sql #sql-сервер

Вопрос:

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

Сначала я бы извлек данные для проверки из базы данных приложения. Поэтому извлеченные данные будут иметь табличный формат (ы), как показано ниже

 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 (ов) всегда будут отображаться после запроса, если значений BOAR нет, затем он примет значения VAB (ов) для замены значений BOAR (ов).Если нет значений BOAR (ов) или VAB (ов), записи не будут отображаться.Мы будем признательны за любую помощь.

Ответ №1:

Рассмотрите возможность использования 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

Комментарии:

1. я сократил соглашение об именовании столбца, NAME поэтому невозможно использовать подстроку в качестве разделения

2. 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, НАПРИМЕР, SAM Blaster Out 1 NO = OG1, BOAR VAP, НАПРИМЕР, SAM Blaster Out 2 NO = OG2 , КАБАН VAP, НАПРИМЕР, SAM Blaster Cir1 NO = OG3, BOAR VAP, НАПРИМЕР, SAM Blaster Cir 2 NO = OG4,

3. Вы должны соответствующим образом обновить свой вопрос. Кажется, что важное число всегда находится в конце значения, верно?

4. Хорошо, я изменил ответ в соответствии с вашими обновлениями