在 T-SQL 中基于相同 id 过滤行

问题描述 投票:0回答:2

我有这张表,我需要过滤一些行。

如果相同的数字与

Account = Tax
Account = Pay
相符,我必须排除这两行。

例如,数字 1 在帐户列中有一行包含税款和一行包含工资,因此我必须排除数字为 1 的所有行。

同样,2号有一排含税,另一排也含税,所以我必须保留它们。

你能帮我吗?

数字 账户 颜色
1 蓝色
1 付款 粉色
2 红色
2 绿色

我期望得到这个结果:

数字 账户 颜色
2 红色
2 绿色
sql sql-server filter group-by row
2个回答
0
投票

参见简单示例

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

演示


0
投票
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 绿色
© www.soinside.com 2019 - 2024. All rights reserved.