Как показать записи на основе предыдущей и следующей строки, используя SQL Server - PullRequest
0 голосов
/ 15 марта 2019

Привет У меня есть следующие записи в базе данных: - Таблица1

enter image description here По сути, я хочу получить те записи из Table1 , которые только подтверждены, но не очищены из столбца Alert , который я выделил в таблице 1.

Если вы видите в Оповещение столбец HD Record20, C2 Record14 и L1 из Record21 столбцов только ASSERTED , но не CLEARED . Показать, что я хочу показать те записи из Alert столбца, которые ASSERTED , но не CLEARED с использованием сервера sql.

Ответы [ 4 ]

1 голос
/ 15 марта 2019

Я думаю, что это то, что вы хотите:

select t1.*
from t t1
where alerts like '%Asserted%' and
      not exists (select 1
                  from t t2
                  where t2.alerts like '%Cleared%' and
                        t2.alerts like left(t1.alerts, charindex(' ', t1.alerts)) + '%'
                 );

Вы действительно должны исправить модель данных, чтобы объект с сигналом тревоги находился в отдельном столбце.

1 голос
/ 15 марта 2019

Попробуйте это:

Select * from tbl where replace(Alerts, 'Asserted','') in
(
Select replace(Alerts, 'Asserted', '') a from tbl
where Alerts like '%Asserted%'
except
select replace(Alerts, 'Cleared','') a  from tbl
where Alerts like '%Cleared%' 
)
0 голосов
/ 15 марта 2019

Вы можете попробовать следующий запрос.

create table tblRecord (record varchar(10), tempText Varchar(20))
insert into tblRecord values
('record1', 'a1 asserted'),('record1', 'a1 cleared'),('record2', 'a2 asserted'),('record2', 'a2 cleared'),('record3', 'a3 asserted')

Select * from tblRecord where tempText like '%asserted%' --To get the records with asserted values
and record not in --To remove the records with cleared values
(
select record from tblRecord 
where REVERSE(LEFT(REVERSE(tempText), CHARINDEX(' ',REVERSE(tempText))- 1)) = 'cleared' --Last word
)

Live Demo

0 голосов
/ 15 марта 2019

Попробуйте это условие ГДЕ, чтобы проверить этот столбец

SELECT Alerts
FROM Table1
WHERE 
Alerts LIKE '%Asserted%'
AND
Alerts NOT LIKE '%Cleared%';

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

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