Prima pagină > Articole > Computing > Varia > Oracle cross-tab reports
Oracle cross-tab reports
Vineri 9 octombrie 2009, de
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;