选择具有多个计数的列的不同值

时间:2014-02-03 10:14:15

标签: sql

我有一张这样的表

SA_ID ---+---Acct_Id---+---SA_Type
101           111           TYPE1
102           111           TYPE2
103           112           TYPE1

我有一个查询来让acct_id拥有多个sa_type

select acct_id,count(*) from sa_tbl
having count(*) > 1
group by acct_id;

我得到了这样的结果

acct_id ---+---count(*)
111             2

但我需要得到这样的结果:

acct_id ---+---count(*)-----+sa_type1----+---sa_type2
    111             2        TYPE1            TYPE2

3 个答案:

答案 0 :(得分:1)

我试图得到你提到的结果,但能够得到类似的东西 在SQL Fiddle

上查看
SELECT tbl.`Acct_Id` AS 'Acct_Id',COUNT(`Acct_Id`)  AS 'counts',
GROUP_CONCAT(`SA_Type`) AS 'types'
FROM `sa_tbl` AS tbl 
GROUP BY tbl.`Acct_Id` 
HAVING counts > 1
希望这会对你有帮助!

答案 1 :(得分:0)

检查枢轴功能,在此处查看问题MySQL pivot table

此功能适用于Oracle和MySQL。对于其他数据库(如果需要),您可以自己另外检查。

答案 2 :(得分:0)

如果你的RDBMS不支持PIVOT(已经建议你),你可以使用MAX / CASE / GROUP BY的组合:

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

SQL Fiddle