#sql
Вопрос:
У меня есть таблица со следующими столбцами: активный, обновлен по времени, Имя, фамилия, Свойство
Мне нужно отобразить полные строки, в которых свойство дублируется, а значение active равно 1.
До сих пор я нашел инструкцию для отображения строк для повторяющегося столбца, но я не могу понять, где разместить инструкцию WHERE, чтобы отображать только активные строки
select * from [Table] where property in (
select property from [table]
group by property having count(*) > 1
)
Order by property DESC
Кроме того, мне нужно найти повторяющиеся имена и фамилии, которые активны, чтобы убедиться, что они не активны в нескольких свойствах.
Я ценю любую помощь в этом и приношу извинения, если на этот вопрос был дан ответ ранее. Я не смог его найти. Если это имеет какое-либо значение, я использую Microsoft SQL Server Management Studio
В соответствии с запросом пример данных будет выглядеть следующим образом (Активный, Дата обновления, Первый, Последний, идентификатор свойства)
1, 2018-09-17, Джон, Доу, 1408
1, 2018-10-20, Эмили, Смит 1408
0, 2018-11-15, Грег Джонс 1408
1, 2018-12-01, Ричард, Смит 1209
Я бы хотел, чтобы он отображал результаты для Джона Доу и Эмили, так как они оба активны и имеют общий идентификатор свойства
Для «Дополнительного» это было бы похоже на
1, 2018-09-17, Джон, Доу, 1408
1, 2018-10-20, Эмили, Смит 1408
0, 2018-11-15, Грег Джонс 1408
1, 2018-12-01, Ричард, Смит 1209
1, 2018-10-17, Джон, Доу, 1103
0, 2018-3-17, Джон, Доу, 1001
Я бы хотел, чтобы он вернул обоих активных неизвестных
Комментарии:
1. Пожалуйста, предоставьте примерные данные и желаемые результаты.
Ответ №1:
Мне нужно отобразить полные строки, в которых свойство дублируется, а значение active равно 1.
Вы можете использовать exists
:
select t.*
from t
where exists (select 1
from t t2
where t2.property = t.property and t.active = 1
);
Комментарии:
1. В соответствии с запросом примерные данные будут выглядеть следующим образом (Активный, Дата обновления, Первый, Последний, идентификатор свойства) 1, 2018-09-17, Джон, Доу, 1408 1, 2018-10-20, Эмили, Смит 1408 0, 2018-11-15, Грег Джонс 1408 1, 2018-12-01, Ричард, Смит 1209 Я бы хотел, чтобы он отображал результаты для Джона Доу и Эмили, так как они оба активны и имеют общий идентификатор свойства
Ответ №2:
CREATE TABLE Test (
FirstName varchar(50),
LastName varchar(50),
Property varchar(50),
Active int
);
INSERT INTO Test(FirstName, LastName, Property, Active)
VALUES
('Jitendra', 'Gupta', 'MyProperty', 1),
('Jitendra', 'Gupta', 'MyProperty', 1),
('Jay', 'Kumar', 'YourProperty', 0),
('Vinod', 'Singh', 'YourProperty', 0),
('Amit', 'Sharma', 'HisProperty', 1),
('Manoj', 'Yadav', 'HerProperty', 1),
('Pankaj', 'Gupta', 'OurProperty', 1);
WITH T1 (Property, DuplicateCount)
AS
(
SELECT Property,
ROW_NUMBER() OVER(PARTITION BY Property ORDER BY Property) AS DuplicateCount
FROM Test
WHERE Active = 1
)
SELECT *
FROM Test
WHERE Property IN (SELECT Property FROM T1 WHERE DuplicateCount > 1)