Prima pagină > Articole > Computing > Varia > Oracle cross-tab reports

Oracle cross-tab reports

Vineri 9 octombrie 2009, de 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 in formatul cerut este folosirea clauzei COUNT a lui Oracle - cuplată bineinţeles cu GROUP BY, inăuntrul căreia vom folosi o expresie CASE WHEN ... THEN ... ELSE ... care va intoarce o valoare 1 cand găseşte ceva in tabela de origine şi NULL cand 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;