Выбрать все нули, но только один не нуль - PullRequest
0 голосов
/ 22 января 2019

Я надеюсь, вы поможете мне в этом: У меня есть рассказ с этими данными

CREATE TABLE dbo.T
(
    SG char(3) NOT NULL,
    SEQNUM int NOT NULL,
    CO varchar(3) NOT NULL,
    FS varchar(12),
    RS varchar(12)
);
INSERT INTO dbo.T(SG,SEQNUM,CO,FS,RS)
VALUES
('054',0,'010','P1',NULL),
('054',1,'010','P2',NULL),
('054',10,'020','P3',NULL),
('054',11,'030','P4',NULL),
('054',12,'030','A1','A1'),
('054',13,'030','P5',NULL),
('054',14,'030','P6',NULL),
('154',10,'150','P7',NULL),
('154',14,'160','A2','A2'),
('154',15,'160','P8',NULL)

Что мне нужно сделать, это вывод

SG  SEQNUM  CO  FS      RS
054 0       010 'P1'    NULL
054 1       010 'P2'    NULL
054 10      020 'P3'    NULL
054 12      030 'A1'    'A1'
154 10      150 'P7'    NULL
154 14      160 'A2'    'A2'

По сути, логика заключается в том, что всякий раз, когда FS = RS сохраняет только эту запись и сортирует все остальные с теми же SG и CO. В других случаях сохраняют данные. Извините за мой плохой английский. Я надеюсь, вы понимаете, что я имею в виду:)

Заранее большое спасибо!

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать НЕ СУЩЕСТВУЕТ для этого

select *
from dbo.T t
where not exists
( 
  select 1
  from dbo.T d
  where d.SG = t.SG and d.CO = t.CO
    and d.FS = d.RS
    and (t.FS IS NULL OR t.RS IS NULL OR t.FS <> t.RS)
);
...