我有以下表格:
ID | NR | Status
1000 | 1 | A
1000 | 2 | A
1001 | 3 | A
1002 | 4 | A
1002 | 5 | N
1003 | 6 | N
我需要一个输出,按ID's
对这些输出进行分组。 NR
列可以忽略。如果其中一个ID's
的记录包含状态A,则会status
作为结果。
所以我的输出是:
ID | Status
1000 | A
1001 | A
1002 | A
1003 | N
有任何建议/想法吗?
答案 0 :(得分:3)
执行GROUP BY
,使用MIN()
为每个ID选择最低状态值,并且A< N!
select id, min(status)
from tablename
group by id
答案 1 :(得分:2)
尽管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;
或者,如果您的表格每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;
这可以节省group by
聚合,并可以使用(id, status)
上的索引来获得最佳效果。
答案 2 :(得分:0)
您确切地想要与谓词匹配的记录"如果其中一个具有这些ID的记录包含状态A,则该状态将作为结果给出。" ? 查询可以简单地写为:
@NgModule({
imports: [..., HttpModule, ...],
declarations: [...,
I18nPipe
],
bootstrap: [AppComponent],
providers: [..., I18nService,
{
provide: APP_INITIALIZER,
// useFactory: (i18NService: I18nService) => () => i18NService.initMessages(I18Enum.ru),
// or
useFactory: initApp,
deps: [I18nService],
multi: true
}
]
})
export class TopJavaModule {
}
export function initApp(i18nService: I18nService){
// Do initing of services that is required before app loads
// NOTE: this factory needs to return a function (that then returns a promise)
return () => i18nService.initMessages(I18Enum.ru); // + any other services...
}
希望这可以提供帮助。