CREATE OR REPLACE FORCE VIEW "GNPGO"."GNPGO_NNG_TESTATA_OP_TERZO" ("ROW_ID", "COD_OP_RECIPIENT", "CODICE_ORDINE", "DATA_ORDINE", "NNG", "OP_ID", "DAC") AS
  (SELECT ROW_ID, COD_OP_RECIPIENT, CODICE_ORDINE, DATA_ORDINE, NNG, OP_ID, DAC FROM GNPGO_NNG_RECIPIENT WHERE TIPO_COMUNICAZIONE = '3'
UNION
SELECT ROW_ID, COD_OP_RECIPIENT, CODICE_ORDINE, DATA_ORDINE, NNG, OP_ID, DAC FROM GNPGO_NNG_DONATING WHERE TIPO_COMUNICAZIONE = '3');

  CREATE OR REPLACE FORCE VIEW "GNPGO"."GNPGO_NNG_TESTATA_RECIPIENT" ("ROW_ID", "NNG", "ID_ESIGENZA", "CODICE_ORDINE", "DATA_ORDINE", "CODICE_FISCALE_PIVA", "OP_DONATING", "TIPO_SERVIZIO", "DAC", "STATO", "CODICE_RIFIUTO", "DESCRIZIONE_RIFIUTO") AS
  (SELECT DISTINCT ROW_ID, NNG, ID_ESIGENZA, CODICE_ORDINE, DATA_ORDINE, CODICE_FISCALE_PIVA, COD_OP_DONATING, TIPO_SERVIZIO, DAC, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT
WHERE TIPO_COMUNICAZIONE = '1');

 CREATE OR REPLACE FORCE VIEW "GNPGO"."GNPGO_NNG_TESTATA_DONATING" ("ROW_ID", "NNG", "CODICE_ORDINE", "DATA_ORDINE", "CODICE_FISCALE_PIVA", "COD_OP_RECIPIENT", "TIPO_SERVIZIO", "STATO", "CODICE_RIFIUTO", "DESCRIZIONE_RIFIUTO", "DAC") AS
  (SELECT ROW_ID, NNG, CODICE_ORDINE, DATA_ORDINE, CODICE_FISCALE_PIVA, COD_OP_RECIPIENT, TIPO_SERVIZIO, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO, DAC FROM GNPGO_NNG_DONATING
WHERE TIPO_COMUNICAZIONE = '1');

CREATE OR REPLACE FORCE VIEW "GNPGO"."GNPGO_NNG_TESTATA_RETURNING" ("ROW_ID", "NNG", "ID_ESIGENZA", "CODICE_ORDINE", "DATA_ORDINE", "STATO", "CODICE_RIFIUTO", "DESCRIZIONE_RIFIUTO") AS
  (SELECT Q1.ROW_ID, Q1.NNG, Q1.ID_ESIGENZA, Q1.CODICE_ORDINE, Q1.DATA_ORDINE, Q1.STATO AS STATO, Q1.CODICE_RIFIUTO AS CODICE_RIFIUTO, Q1.DESCRIZIONE_RIFIUTO AS DESCRIZIONE_RIFIUTO
FROM
((SELECT ROW_ID, NNG, ID_ESIGENZA, CODICE_ORDINE, DATA_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT
WHERE TIPO_COMUNICAZIONE = '9') Q1
LEFT OUTER JOIN
(SELECT NNG, ID_ESIGENZA, CODICE_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT WHERE TIPO_COMUNICAZIONE='10') Q2
ON Q1.ID_ESIGENZA = Q2.ID_ESIGENZA
LEFT OUTER JOIN
(SELECT NNG, ID_ESIGENZA, CODICE_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT WHERE TIPO_COMUNICAZIONE='11') Q3
ON Q1.ID_ESIGENZA = Q3.ID_ESIGENZA)
where Q2.STATO IS NULL AND Q3.STATO IS NULL)
UNION
(SELECT Q1.ROW_ID, Q1.NNG, Q1.ID_ESIGENZA, Q1.CODICE_ORDINE, Q1.DATA_ORDINE, Q2.STATO AS STATO, Q2.CODICE_RIFIUTO AS CODICE_RIFIUTO, Q2.DESCRIZIONE_RIFIUTO AS DESCRIZIONE_RIFIUTO
FROM
((SELECT ROW_ID, NNG, ID_ESIGENZA, CODICE_ORDINE, DATA_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT
WHERE TIPO_COMUNICAZIONE = '9') Q1
LEFT OUTER JOIN
(SELECT NNG, ID_ESIGENZA, CODICE_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT WHERE TIPO_COMUNICAZIONE='10') Q2
ON Q1.ID_ESIGENZA = Q2.ID_ESIGENZA
LEFT OUTER JOIN
(SELECT NNG, ID_ESIGENZA, CODICE_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT WHERE TIPO_COMUNICAZIONE='11') Q3
ON Q1.ID_ESIGENZA = Q3.ID_ESIGENZA)
where Q2.STATO IS NOT NULL)
UNION
(SELECT Q1.ROW_ID, Q1.NNG, Q1.ID_ESIGENZA, Q1.CODICE_ORDINE, Q1.DATA_ORDINE, Q3.STATO AS STATO, Q1.CODICE_RIFIUTO AS CODICE_RIFIUTO, Q1.DESCRIZIONE_RIFIUTO AS DESCRIZIONE_RIFIUTO
FROM
((SELECT ROW_ID, NNG, ID_ESIGENZA, CODICE_ORDINE, DATA_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT
WHERE TIPO_COMUNICAZIONE = '9') Q1
LEFT OUTER JOIN
(SELECT NNG, ID_ESIGENZA, CODICE_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT WHERE TIPO_COMUNICAZIONE='10') Q2
ON Q1.ID_ESIGENZA = Q2.ID_ESIGENZA
LEFT OUTER JOIN
(SELECT NNG, ID_ESIGENZA, CODICE_ORDINE, STATO, CODICE_RIFIUTO, DESCRIZIONE_RIFIUTO FROM GNPGO_NNG_RECIPIENT WHERE TIPO_COMUNICAZIONE='11') Q3
ON Q1.ID_ESIGENZA = Q3.ID_ESIGENZA)
where Q3.STATO IS NOT NULL);