Oracle cross-tab reports

, by  Valentin Murariu

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;