Sql在case上连接结果

时间:2016-07-25 13:29:13

标签: sql postgresql

我有一张这样的表

Nomeutente|data      |Controllo
----------|----------|---------
utente1   |11-11-2016|prova1
utente1   |11-11-2016|prova4
utente1   |11-11-2016|prova3
utente2   |11-11-2016|ricontrollo
utente2   |11-11-2016|ricontrollo2
utente2   |11-11-2016|ricontrollo3
utente3   |11-11-2016|ricontrollo3
utente4   |11-11-2016|ricontrollo3

并且使用case i创建一个类似于pivot的查询

Select
  BASE.data,
  Max(Case BASE.Nomeutente When 'utente1' Then base.controllo Else ''
  End) As utente1,
  Max(Case BASE.Nomeutente When 'utente2' Then base.controllo Else ''
  End) As utente2,
  Max(Case BASE.Nomeutente When 'utente3' Then base.controllo Else ''
  End) As utente3,
  Max(Case BASE.Nomeutente When 'utente4' Then base.controllo Else ''
  End) As utente4,
From
  (Select
    Nomeutente,
    data,
    controllo
  From PROVA) As BASE
Group By
  base.data

但我希望在插入所有controllo值的情况下如

Nomeutente|data      |Controllo
----------|----------|---------
utente1   |11-11-2016| prova1,prova4,prova3
utente2   |11-11-2016| ricontrollo,ricontrollo2,ricontrollo3
utente3   |11-11-2016| ricontrollo3
utente4   |11-11-2016| ricontrollo3

我可以在postgresql 7.4上创建什么样的查询?

1 个答案:

答案 0 :(得分:1)

首先创建聚合(仅一次):

create aggregate textcat_all(
  basetype    = text,
  sfunc       = textcat,
  stype       = text,
  initcond    = ''
);

然后你可以运行:

select
  Nomeutente,
  "data",
  textcat_all(Controllo || ',') as Controllo
from
  <table_name>
group by
  Nomeutente, "data";

推荐阅读: