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

一个“可变列”输出有什么用途?如果您想要这样更复杂的输出,请尝试创建一个过程。