Ausgabe beim Select manipulieren

edit | delete

Autor: Varsamis Karamanidis (Macky), Ralf v.d.Mark

eingetragen: Mittwoch, 18. August 2010 um 08:36 Uhr (33/2010 Kalenderwoche)

geändert: Mittwoch, 15. Februar 2017 um 10:08 Uhr (7/2017 Kalenderwoche)

Keywords: Select case ifnull manipulieren ersetzen replace Zeichenkonvertierung concat ELSEIF

Kategorien: DB: MySQL, DB: MariaDB,

Text:

Bei der Ausgabe, kann man andere Werte vortäuschen/ausgeben.


Fall 1: Beim Select beim Auftreten eines bestimmten Wertes (22) einen anderen Wert (33) ausgeben.
HINWEIS: Dieser kommt auch dann, wenn es den Wert in der Tabelle schon gibt.


Fall 2: Wenn ein Feld leer ist, dann soll ein anderes ausgegeben werden.


Fall 3: Führt Datenfelder aus unterschiedlichen Tabellen zusammen, blendet Datensätze ab einem bestimmten Alter aus. In der Jobboerse wurde die Query als View benutzt.



Siehe auch TechDox-Artikel:
DB-Tabelleninhalte bearbeiten


Weiteres:
http://www.oreilly.de/catalog/sqlnutger/chapter/ch04.html


http://dev.mysql.com/doc/refman/5.0/en/if.html


Quellcode:  

Fall 1:

SELECT tab.id, tab.txt,
       CASE WHEN tab.spalte_id = 22 
              OR tab.spalte_id = 11
                  THEN 33 
            ELSE tab.spalte_id END  
                 AS spalte_id
FROM db_tabelle AS tab

Tabelle original:
id | txt  | spalte_id
----------------------
 1 | bla1  | 233
 2 | bla2  | 11
 2 | bla2  | 22
 3 | bla3  | 233

Tabellen-Ausgabe:
id | txt  | spalte_id
----------------------
 1 | bla1  | 233
 2 | bla2  | 33
 2 | bla2  | 33
 3 | bla3  | 233

______________________________________________
Fall 2: 

SELECT tab.id, tab.txt,
       IFNULL(tab.spalte_id, tab.id) AS spalte_id
FROM db_tabelle AS tab

Tabelle original:
id | txt  | spalte_id
----------------------
 1 | bla1  | 233
 2 | bla2  | 
 3 | bla3  | 233
 
Tabellen-Ausgabe:
id | txt  | spalte_id
----------------------
 1 | bla1  | 233
 2 | bla2  | 2
 3 | bla3  | 233

______________________________________________
Fall 3: 

SELECT beknd.`bekund_id`,
       beknd.`person_id`,
     DATE(beknd.`bekund_gueltigkeit_datum`) AS bekund_gueltigkeit_datum,
     FORMAT(beknd.`bekund_gehalt_in_euro`, 2) AS bekund_gehalt_in_euro,
       beknd.`bekund_gueltig_bis`,
       beknd.`bekund_freitext`,
       CONCAT(beknd.`bekund_name`, ' (', beknd.`bekund_krzl`, ')') 
                                                   AS bekund_ausgabe,
       beknd.`bekund_eingabe_dat`,
       beknd.`bekund_veroeff_dat`,
       beknd.`bekund_update_dat`,
       beknd.`bekund_status`,
       beknd.`bekund_herkunft_anzeigen`,
	   herkft.`bland_id` AS herkft_bland_id,
       CASE WHEN beknd.`bekund_herkunft_anzeigen` = 1
                  THEN herkft.ort_name
            ELSE NULL END
                 AS herkft_ort_name,
       CASE WHEN beknd.`bekund_herkunft_anzeigen` = 1
                  THEN (SELECT `bland_k_name`
                        FROM `view_ipa_bundeslaender` AS bland
                        WHERE bland.`bland_id` = herkft.`bland_id`)
            ELSE NULL END
                 AS herkft_bland_name,
       CASE WHEN beknd.`bekund_herkunft_anzeigen` = 1
                  THEN (SELECT CONCAT_WS("; ", 
                                         `bland_name`, 
                                         `bland_k_name`, 
                                         `bland_kurz`)
                        FROM `view_ipa_bundeslaender` AS bland
                        WHERE bland.`bland_id` = herkft.`bland_id`)
            ELSE NULL END
                 AS herkft_bland_zum_suchen,
       GROUP_CONCAT(ziel.`ort_name`
                    SEPARATOR ", ") AS ziel_orte,
       GROUP_CONCAT(ziel.`bland_id`
                    SEPARATOR ", ") AS ziel_bland_ids,
       CONCAT_WS(', ', DATE_FORMAT(NOW(), '%Y%m%d')) AS bekund_wert_heute,
  CASE 
    WHEN `fobi_id` > 9999
       THEN ((`fobi_id` * 100000) + `pers_id`)
    ELSE 
       CASE 
	      WHEN `fobi_id` > 999
            THEN ((`fobi_id` * 1000000) + `pers_id`)
          ELSE 
		    CASE 
               WHEN `fobi_id` > 99
                  THEN ((`fobi_id` * 10000000) + `pers_id`)
               ELSE 
                  CASE 
                     WHEN `fobi_id` > 9
                       THEN ((`fobi_id` * 100000000) + `pers_id`)
                   ELSE ((`fobi_id` * 1000000000) + `pers_id`)
                END
            END
        END 
    END AS NeueSchoeneZahl
FROM `jb_bekundung` AS beknd,
     `jb_bekund_ziel` AS ziel,
     `jb_person_herkunft` AS herkft
WHERE beknd.`bekund_id` = ziel.`bekund_id`
AND   beknd.`person_id` = herkft.`person_id`
AND   beknd.`bekund_status` = 1
AND   beknd.`bekund_gueltig_bis` > CONCAT_WS(', ', 
                                             DATE_FORMAT(NOW(), 
                                             '%Y%m%d'))
GROUP BY beknd.`bekund_id`;

______________________________________________

DELIMITER //

CREATE FUNCTION SimpleCompare(n INT, m INT)
  RETURNS VARCHAR(20)

  BEGIN
    DECLARE s VARCHAR(20);

    IF n > m THEN SET s = '>';
    ELSEIF n = m THEN SET s = '=';
    ELSE SET s = '<';
    END IF;

    SET s = CONCAT(n, ' ', s, ' ', m);

    RETURN s;
  END //

DELIMITER ;