我有这张表,我需要过滤一些行。
如果相同的数字与
Account = Tax
和 Account = Pay
相符,我必须排除这两行。
例如,数字 1 在帐户列中有一行包含税款和一行包含工资,因此我必须排除数字为 1 的所有行。
同样,2号有一排含税,另一排也含税,所以我必须保留它们。
你能帮我吗?
数字 | 账户 | 颜色 |
---|---|---|
1 | 税 | 蓝色 |
1 | 付款 | 粉色 |
2 | 税 | 红色 |
2 | 税 | 绿色 |
我期望得到这个结果:
数字 | 账户 | 颜色 |
---|---|---|
2 | 税 | 红色 |
2 | 税 | 绿色 |
参见简单示例
select *
from(
select *
,sum(case when ACCOUNT='TAX' then 1 else 0 end)over(partition by number)tax_qty
,sum(case when ACCOUNT='PAY' then 1 else 0 end)over(partition by number)pay_qty
from test
) t
where tax_qty>0 and pay_qty>0
数字 | 账户 | 颜色 | 税额 | 付款数量 |
---|---|---|---|---|
1 | 税 | 蓝色 | 1 | 1 |
1 | 付款 | 粉色 | 1 | 1 |
CREATE TABLE table1
(
number VARCHAR(512),
ACCOUNT VARCHAR(512),
COLOR VARCHAR(512)
);
INSERT INTO table1 (number, ACCOUNT, COLOR) VALUES
('1', 'TAX', 'BLUE'),
('1', 'PAY', 'PINK'),
('2', 'TAX', 'RED'),
('2', 'TAX', 'GREEN');
Select * from table1
--numbers that have TAX and PAY
select a.number from table1 a inner join table1 b ON a.number=b.number AND b.ACCOUNT='TAX' where a.Account='PAY'
Select * from table1
WHERE number not in (
select a.number from table1 a inner join table1 b ON a.number=b.number AND b.ACCOUNT='TAX' where a.Account='PAY'
)
数字 | 账户 | 颜色 |
---|---|---|
2 | 税 | 红色 |
2 | 税 | 绿色 |