DISTINCT, aber NULL ignorieren?

Jerinca

Erfahrenes Mitglied
Spalten zusammenfassen -> NULLen ignorieren!

Hallo Leute!

Wenn ich es vereinfache, habe ich folgendes Problem:

Ich habe eine Tabelle mit sagen wir mal 2 Spalten, nennen wir sie A und B.

Es gibt 2 Datensätze: 1 und 2 mit den Inhalten x und y; das Ganze sieht so aus:

Code:
	|	A	|	B	
-------------------------------------------------
1	|	x	|	NULL	
2	|	NULL	|	y

Was ich möchte, ist eine Zusammenfassung dieser 2 Spalten zu einer (C), die dann so aussieht:

Code:
	|	C	
----------------------------
1	|	x	
2	|	y

Also, ich meine damit keine neue Tabelle, sondern eine angepasste SELECT-Anweisung.

Ich habe mir schon INTERSECT gedacht, was ja eine Schnittmenge wäre, aber das würde nicht hinhauen... Ein DISTINCT auch nicht...

Ich hoffe, jemand von Euch versteht mein Problem und kann mir helfen...

Danke schonmal, Jerinca
 
Zuletzt bearbeitet:
Hoffe mal ich hab dein Problem richtig verstanden. Probier mal das:

Select distinct * from deinetabelle where KW_Gelagert != ''
 
Hallo nochmal!

Leider würde Dein Vorschlag nicht klappen, und zwar weil ich ja geschrieben hatte, daß es in beiden Spalten zu NULLEN kommen kann.

Deswegen mache ich danach (nicht per SQL, sondern per JavaScript) eine Fallunterscheidung: Wenn im 1. Feld NULL steht, dann nimm den Inhalt des 2. Feldes, bzw. umgekehrt.

So, wie ich es jetzt oben geschrieben habe, ist es der Kern meines Problems. Wäre nett, wenn Du da nochmal kurz drüber schauen könntest ;)

Danke für alle Vorschläge
 
Also ich würde immernoch an meinem Vorschlag festhalten.
Code:
Select distinct * from tabelle where A<>'' or B<>''
 
Hallo nochmal!

Also, Dein Vorschlag bringt wirklich nichts, denn durch das OR wird nichts bewirkt!

Aber nach vielem Blut und Wasser Schwitzen habe ich es nun hinbekommen:

SELECT IsNull(A + ' ','') + IsNull(B + ' ','') AS C
FROM tabelle
WHERE
(A is not null AND B is null)
OR
(A is null AND B is not null)

Genau so bekommt man die Spalte C hin, die ich oben gezeichnet habe!

Danke trotzdem für's Anteilnehmen :p

Gruß, Jerinca
 
Hallo!

Versuchs mal so:
(Beispiel hab ich mit Oracle gemacht...)

Code:
drop table tab;
create table tab(id int, a varchar(1), b varchar(1));
insert into tab(id,a) values (1,'x');
insert into tab(id,b) values (2,'y');

Code:
SQL> select * from tab;

        ID A B
---------- - -
         1 x
         2   y

|| ist das Zeichen zur Stringverkettung unter Oracle wenn du ein anderes DBMS verwendest
musst du einfach nur den jeweiligen Verkettungsoperator / Funktion verwenden.

Code:
SQL> select A || B as C from tab;

C
--
x
y

Gruß Tom
 
Zurück