Ankündigung

Einklappen
Keine Ankündigung bisher.

Leere Ergebnisse "" und NULL aus string_agg() soll leeres Resalt zurückgeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Leere Ergebnisse "" und NULL aus string_agg() soll leeres Resalt zurückgeben

    Mit der Aggregatfunktion string_agg( spalte , ' , ' ) AS string-kette soll erreicht werden, dass bei leeren Strings oder Null-Werten keine Zeile zurückgeleifert wird. Aktuell hab ich immer noch das Problem, dass eine Ergebnis-Zeile zurückkommt mit dem Spalten-Wert 'string-kette', was jedoch unsinnig ist.

    Kann man das einfach mit SQL lösen? Ich nutze PostgreSQL.

    SG

  • #2
    Workaround: zähle, wie oft NULL vorkommt, und entscheide dann, was Du damit machst.

    Code:
    test=*# select * from codedesigner ;
      a  |   b   
    -----+-------
     bla |
     bla | fasel
    (2 Zeilen)
    
    test=*# select string_agg(a,','), string_agg(b,','), count(1) filter (where a is null) as nulls_a, count(1) filter (where b is null) as nulls_b from codedesigner ;
     string_agg | string_agg | nulls_a | nulls_b
    ------------+------------+---------+---------
     bla,bla    | fasel      |       0 |       1
    (1 Zeile)
    
    test=*#
    Du kannst das auch dann so direkt in PG machen:

    Code:
    test=*# with tmp as (select string_agg(a,',') a, string_agg(b,',') b, count(1) filter (where a is null) as nulls_a, count(1) filter (where b is null) as nulls_b from codedesigner) select case when nulls_a = 0 then a else null end as a, case when nulls_b = 0 then b else null end as b from tmp;;
        a    | b
    ---------+---
     bla,bla |
    (1 Zeile)

    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Das kannst du mit HAVING machen...

      Code:
      SELECT string_agg(bar,',') FROM foo HAVING string_agg(bar,',') != ""

      Kommentar


      • #4
        @erc: das Problem des Fragestellers ist (sofern richtig verstanden), daß bei string_agg() NULL-Werte irgnoriert werden. Also, wenn 'bla',NULL,'fasel' in der Tabelle ist, kommt 'bla,fasel' raus, der Fragesteller will hier aber lieber NULL haben, da (mind) einmal NULL in der Tabelle ist.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von erc Beitrag anzeigen
          Das kannst du mit HAVING machen...

          Code:
          SELECT string_agg(bar,',') FROM foo HAVING string_agg(bar,',') != ""
          Danke! Genau das war die Lösung.
          Ich hatte noch nen Trick zuvor angewendet, indem ich eine Funktion genutzt habe die ich als Wrapper missbraucht hab um andere Ergebnisse zu erhalten, also quasi keine.

          Kommentar

          Lädt...
          X