2016-04-15 17 views
0

Im Moment bekomme ich für Zwecke folgende Daten in 3 verschiedenen Spalten Berichterstattung:CASE WHEN mit mehreren THEN ELSE

//Number 
       'CASE WHEN should_be.sh = "50" 
         THEN 
          REPLACE(SUBSTRING_INDEX(account.code,".",1)," ","") 
         ELSE 
          "500." 
        END', 
// Account 
        'CASE WHEN should_be.sh = "50" 
          THEN 
          REPLACE(
           SUBSTRING(SUBSTRING_INDEX(account.code,".",2), 
            INSTR(account.code, ".") + 1) 
          ," ","") 
         ELSE 
          "92145000000" 
        END', 
// Costsnumber 
         'CASE WHEN should_be.sh = "50" 
           THEN 
            CASE WHEN LENGTH(account.code) < 15 
             THEN 
              REPLACE(
               SUBSTRING_INDEX(account.code,".",-1) 
              ," ","") 
             ELSE 
              "" 
            END 
           ELSE 
            "" 
          END', 

Wenn jeder Bedingung ELSE erfüllt, dann sehen die 3 Spalten wie folgt aus:

+--------+-------------+------------+ 
| number | account | costnumber | 
+--------+-------------+------------+ 
| 500 | 92145000000 |   | 
+--------+-------------+------------+ 

Wie die 3 Spalten kombinieren, so dass ich eine Spalte wie die (zum Beispiel in dem ELSE Fall hat:

Antwort

1

Nur concat_ws() verwenden:

CONCAT_WS('-', 
      (CASE WHEN should_be.sh = '50' 
       THEN REPLACE(SUBSTRING_INDEX(account.code, '.', 1), ' ', '') 
       ELSE '500.' 
      END), 
      (CASE WHEN should_be.sh = '50' 
       THEN REPLACE(SUBSTRING(SUBSTRING_INDEX(account.code, '.',2), 
            INSTR(account.code, '.') + 1), ' ', '') 
       ELSE '92145000000' 
      END), 
      (CASE WHEN should_be.sh = '50' AND LENGTH(account.code) < 15 
       THEN REPLACE(SUBSTRING_INDEX(account.code, '.', -1), ' ', '') 
       ELSE '' 
      END) 
     ) 

Wenn Sie "(leer)" wirklich erscheinen für das dritte Element, dann ersetzen Sie die letzte ELSE '' mit ELSE '(empty)'.

Verwandte Themen