#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
Комментарии:
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. Хорошо, я изменил ответ в соответствии с вашими обновлениями