2 Stimmen

Brauche Hilfe für eine Anfrage

Ich habe diese Tabelle

NAME|VALUE|
T   |  A
T   |  NONE
T   |  B
S   |  NONE

wobei der Wert NONE ein NULL-Wert in real ist.


Ich brauche eine Abfrage, die alle Zeilen zurückgeben wird, ABER wenn der Name einen Wert hat sollte ich NUR die Zeile mit seinem Wert zurückgeben, wie dies im Ergebnis für die Tabelle oben:

NAME|VALUE|
T   |  A
T   |  B 
S   |  NONE

Können Sie eine solche Abfrage durchführen?

Vielen Dank im Voraus für Ihre Hilfe.

1voto

Matthew Wood Punkte 14949

Gibt es maximal zwei Werte? Das heißt, ist es nur möglich, einen einzigen Wert, "NONE", oder einen von beiden zu erhalten. Wenn ja, können Sie dies tun:

SELECT name, COALESCE(MAX(NULLIF(value, 'NONE'), 'NONE')
FROM <tablename>
GROUP BY name

Ich glaube, dass das Folgende für den allgemeinen Fall funktionieren wird (ein oder mehrere Nicht-NONE-Werte möglich):

SELECT name, value FROM <tablename> WHERE value <> 'NONE'
UNION
SELECT name, value FROM <tablename> WHERE value = 'NONE'
  AND name NOT IN (SELECT name FROM <tablename> WHERE value <> 'NONE')

1voto

Mark Byers Punkte 761508

Hier ist eine Möglichkeit, wie Sie es tun können:

SELECT T1.NAME, T2.VALUE
FROM (SELECT DISTINCT name FROM Table1) AS T1
LEFT JOIN (SELECT * FROM Table1 WHERE VALUE IS NOT NULL) AS T2
ON T1.NAME = T2.NAME

Ergebnisse:

S   NULL
T   A
T   B

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X