Sql 选择具有多个计数的列的不同值
我有一张这样的桌子Sql 选择具有多个计数的列的不同值,sql,Sql,我有一张这样的桌子 SA_ID ---+---Acct_Id---+---SA_Type 101 111 TYPE1 102 111 TYPE2 103 112 TYPE1 acct_id ---+---count(*) 111 2 我有一个查询,用于获取具有多个sa_类型的帐户id select acct_id,count(*) from sa_t
SA_ID ---+---Acct_Id---+---SA_Type
101 111 TYPE1
102 111 TYPE2
103 112 TYPE1
acct_id ---+---count(*)
111 2
我有一个查询,用于获取具有多个sa_类型的帐户id
select acct_id,count(*) from sa_tbl
having count(*) > 1
group by acct_id;
我得到这样的结果
SA_ID ---+---Acct_Id---+---SA_Type
101 111 TYPE1
102 111 TYPE2
103 112 TYPE1
acct_id ---+---count(*)
111 2
但我需要得到这样的结果:
acct_id ---+---count(*)-----+sa_type1----+---sa_type2
111 2 TYPE1 TYPE2
我试着得到你们在问题中提到的结果,但能得到类似的结果 检查一下
希望这对你有帮助 检查pivot函数,参见此处的问题
此函数适用于Oracle和MySQL。对于其他数据库(如果需要),您可以自己进行额外检查。如果您的RDBMS不支持PIVOT(正如已经向您建议的那样),您可以通过以下方式使用MAX/CASE/GROUP组合:
select
acct_id,
max((case when sa_type = 'TYPE1' then sa_id else NULL end)) as type1,
max((case when sa_type = 'TYPE2' then sa_id else NULL end)) as type2
from sa_tbl
group by acct_id
输出:
acct_id type1 type2
112 103
111 101 102
一个“可变列”输出有什么用途?如果您想要这样更复杂的输出,请尝试创建一个过程。