Den*_*ent 2 sql t-sql sql-server
我有下表:
ID | NR | Status
1000 | 1 | A
1000 | 2 | A
1001 | 3 | A
1002 | 4 | A
1002 | 5 | N
1003 | 6 | N
Run Code Online (Sandbox Code Playgroud)
我需要一个将这些分组的输出ID's
。NR
可以忽略该列。如果具有这些的记录之一ID's
包含状态 A,status
则将作为结果给出。
所以我的输出是:
ID | Status
1000 | A
1001 | A
1002 | A
1003 | N
Run Code Online (Sandbox Code Playgroud)
任何建议/想法?
虽然min()
是最简单的方法,但不容易推广。另一种方法是:
select id
(case when sum(case when status = 'A' then 1 else 0 end) > 0
then 'A'
else 'N' -- or whatever
end) as status
from t
group by id;
Run Code Online (Sandbox Code Playgroud)
或者,如果您有一张每行一行的表格id
,那么我将使用exists
:
select ids.id,
(case when exists (select 1 from t where t.id = ids.id and t.status = 'A')
then 'A' else 'N'
end) as status
from ids;
Run Code Online (Sandbox Code Playgroud)
这节省了group by
聚合,并且可以使用索引来(id, status)
获得最佳性能。
归档时间: |
|
查看次数: |
1782 次 |
最近记录: |