2

望ましい結果を達成するために情報を操作するのに多くの困難があります。クエリを通じて、次の結果に参加します。

   Area     |  ID_AT  |     AT    | TYPE
-----------------------------------------
Informatica |    1    |  Sistemaa |  E
Informatica |    3    | engraçado |  E
Informatica |    3    | engraçado |  I
Gestão      |    2    |   aaaaa   |  I

クエリ:

select a.Area, c.ID_AT, c.AT, dest.type 
from AREA_AT a
left join AT_C c on a.id_AREA_AT = c.id_AREA_AT
left join dest_atv d on d.id_AT = c.id_at and d.id_uo = c.id_uo
left join CLIE dest on d.id_CLIE = dest.id_CLIE
where id.uo = 1222 
order by a.id_AREA_AT, c.id_at, dest.type

しかし、私が欲しいのは、次のようにphpでテーブルを作成することです。

   Area     |  ID_AT  |     AT    | E | I
-------------------------------------------
Informatica |    1    |  Sistemaa | X |
Informatica |    3    | engraçado | X | X
Gestão      |    2    |   aaaaa   |   | X

要するに、ここで私が意図しているのは、テーブルID ativを1つだけ表示することです。これは、クエリの結果に応じて、IまたはEを入力するかどうかを示します。

自分で作業を容易にするためにクエリを変更する必要がありますか?または、この関数を実行するには、phpでかなり複雑なアルゴリズムを作成する必要がありますか?安藤はここで何時間もかかりますが、それでも私を助けることができる解決策を見つけることができませんでしたか?

4

1 に答える 1

0

ピボットクエリを実行する必要があるようです。何かのようなもの

select a.Area, 
       c.ID_AT, 
       c.AT, 
       max( case when dest.type = 'E' then 'X' else null end) E,
       max( case when dest.type = 'I' then 'X' else null end) I
  from AREA_AT a
       left join AT_C c on a.id_AREA_AT = c.id_AREA_AT
       left join dest_atv d on d.id_AT = c.id_at and d.id_uo = c.id_uo
       left join CLIE dest on d.id_CLIE = dest.id_CLIE
 where id.uo = 1222 
 group by a.area, c.id_at, c.at
 order by a.area, c.id_at

ORDER BYこの定式化でその列を選択(およびグループ化)しないと、そのa.id_area_at列に移動できないことに注意してください。代わりに並べ替えるように変更しましたa.area

于 2012-11-30T17:56:05.800 に答える