我希望您能在这方面帮助我: 我有一个关于这个数据的故事
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整理所有其他条目,在其他情况下保留数据。 对不起,我的英语不好。 我希望你明白我的意思:)
非常感谢!
答案 0 :(得分:3)
您可以为此使用NOT EXISTS
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)
);