Problema dată este următoarea:
Avem o tabelă care conţine date, ca de exemplu:
| MSISDN | Language | Service |
|---|---|---|
| 41788001234 | en | A |
| 41788001234 | en | B |
sau, poate pentru un alt MSISDN, vom avea ceva de genul:
| MSISDN | Language | Service |
|---|---|---|
| 41788001235 | fr | A |
sau chiar:
| MSISDN | Language | Service |
|---|---|---|
| 41788001236 | it | B |
Ceea ce vor oamenii să vadă este:
| MSISDN | Language | Service1 | Service2 |
|---|---|---|---|
| 41788001234 | en | A | B |
| 41788001235 | fr | A | |
| 41788001236 | it | B |
Secretul pentru a afişa datele în formatul cerut este folosirea clauzei COUNT a lui Oracle - cuplată bineînţeles cu GROUP BY, înăuntrul căreia vom folosi o expresie CASE WHEN ... THEN ... ELSE ... care va întoarce o valoare 1 când găseşte ceva în tabela de origine şi NULL când nu găseşte.
De exemplu:
SELECT MSISDN, LANGUAGE,
DECODE( COUNT(CASE WHEN SERVICE = 'A' THEN 1 ELSE NULL END), 0, '', 'A') AS SERVICE1,
DECODE( COUNT(CASE WHEN SERVICE = 'A' THEN 1 ELSE NULL END), 0, '', 'B') AS SERVICE2
FROM TABLE
GROUP BY MSISDN, LANGUAGE;