asg2012
asg2012

Reputation: 335

SQL CASE with concatenated columns

I'm trying to locate a substring in a concatenation of data from different columns and return a value based on the result. I've tried this query:

SELECT
    V_CMR_1.*, 
    T_RICEVITORI.*, 
    CASE 
        WHEN contains(V_CMR_1.SP1C || ' ' || V_CMR_1.SP2C || ' ' || V_CMR_1.SP3C || ' ' || V_CMR_1.SP4C || ' ' || V_CMR_1.SP5C, 'GIALLA') > 0 THEN 'GELBE'
        WHEN contains(V_CMR_1.SP1C || ' ' || V_CMR_1.SP2C || ' ' || V_CMR_1.SP3C || ' ' || V_CMR_1.SP4C || ' ' || V_CMR_1.SP5C, 'ROSSA') > 0 THEN 'ROTE'
        END AS SORTE
FROM 
    MAGAZZINO.V_CMR_1, 
    MAGAZZINO.T_RICEVITORI
WHERE
    V_CMR_1.ID_RICEVITORE=T_RICEVITORI.ID_RICEVITORE 
    AND V_CMR_1.ID_USCITA=:IDUSCITA 
    AND V_CMR_1.ID_POSIZIONE LIKE :ANNO

However I'm getting weird oracle errors (end-of-file on communication channel). Will it ever work?

Thanks!

Upvotes: 0

Views: 142

Answers (1)

hotfix
hotfix

Reputation: 3396

Try instr function instead of contains

SELECT V_CMR_1.*, 
       T_RICEVITORI.*, 
       CASE WHEN instr(V_CMR_1.SP1C || ' ' || V_CMR_1.SP2C || ' ' || V_CMR_1.SP3C || ' ' || V_CMR_1.SP4C || ' ' || V_CMR_1.SP5C, 'GIALLA') > 0 THEN 'GELBE'
            WHEN instr(V_CMR_1.SP1C || ' ' || V_CMR_1.SP2C || ' ' || V_CMR_1.SP3C || ' ' || V_CMR_1.SP4C || ' ' || V_CMR_1.SP5C, 'ROSSA') > 0 THEN 'ROTE'
       END AS SORTE
FROM MAGAZZINO.V_CMR_1, MAGAZZINO.T_RICEVITORI
WHERE V_CMR_1.ID_RICEVITORE=T_RICEVITORI.ID_RICEVITORE 
AND V_CMR_1.ID_USCITA=:IDUSCITA AND V_CMR_1.ID_POSIZIONE LIKE :ANNO

Upvotes: 2

Related Questions