给出以下数据:
DECLARE @Data TABLE
(
clientid INT,
reqyear INT,
status VARCHAR(10)
);
INSERT INTO @Data VALUES
(1, 2017, 'Recd'),
(1, 2018, 'Reject'),
(2, 2017, 'Recd'),
(3, 2017, 'Recd'),
(3, 2018, 'Request'),
(4, 2015, 'Recd'),
(4, 2017, 'Reject');
SELECT * FROM @Data;
我需要检索一份客户ID列表,在该列表中我们收到了一年的文档,但又被拒绝了一年。在此示例中,我只希望客户端1和4。
客户2无效,因为我们在一年内收到,但没有另一年的数据。
另外,由于我们在一年内收到但在另一年内仅请求(但未被拒绝),因此不会退回客户3。
如何为此编写SQL?
答案 0 :(得分:3)
您可以计算出这两个客户中每个客户拥有的status
个不同的数量:
SELECT clientid
FROM @Data
WHERE status IN ('Recd', 'Reject')
GROUP BY clientid
HAVING COUNT(DISTINCT status) = 2
答案 1 :(得分:2)
SELECT distinct d1.clientid
FROM @Data d1
join @Data d2
on d1.status = 'Recd'
AND d2.status = 'Reject'
and d1.clientid = d2.clientid
and d1.reqyear != d2.reqyear ;
答案 2 :(得分:0)
因此,您希望任何在另一行上具有拒绝但没有拒绝的客户端吗?
如果是这样:
select clientid
from @data d
group by clientid
having sum(case when status = 'Reject' then 1 else 0 end) not in (count(*), 0);