Gibt es eine Möglichkeit, nur SELECT
Zeilen mit bestimmten Daten in einer Spalte zu verwenden, ohne WHERE
?
zB wenn ich das hätte:
SELECT * FROM Users
WHERE town = 'Townsville'
Gibt es eine Möglichkeit, die WHERE
Klausel in die SELECT
Anweisung zu implementieren ?
etwas wie
SELECT *, town('Townsville') FROM Users
Es ist eine bizarre Frage, aber sie wurde mir von Gleichaltrigen gestellt
sql-server
Josh Stevenson
quelle
quelle
Antworten:
Ich bin mir nicht sicher, ob das die verrückte Sache ist, nach der du gesucht hast ...
Haftungsausschluss : Ich habe absolut keine Ahnung, warum Sie dies verwenden möchten.
quelle
Daten
Alternativlösungen
Duplikate behalten
Ausgabe:
Für das letzte Beispiel:
Probieren Sie es hier aus: Stack Exchange Data Explorer
quelle
GROUP BY
Lösungen können Sie auch die PK in die Liste der Gruppen nach hinzufügen (um 100% sicher zu sein, dass die Abfragen die gleiche Anzahl von Zeilen wie WHERE zurückgeben). Vorausgesetzt natürlich, es gibt eine PK;)Ein anderer Weg.
( Wiederverwendung der Beispieldaten von Paul White )
quelle
"Nur zum Spaß" können Sie
order by
mit verwendentop(1) with ties
Dies ordnet alle Zeilen mit
Townsville
zuerst an, da der Fall1
if zurückgibttown = 'Townsville'
. Alle anderen Zeilen werden2
von der Groß- / Kleinschreibung zurückgegeben.Die
with ties
Klausel bewirkt, dass die Abfrage alle Zeilen zurückgibt, die für den letzten Platz in den zurückgegebenen Zeilen "gleich" sind. Die Verwendungtop(1)
in Kombination mitwith ties
dann alle Zeilen zurückgeben , die den gleichen Wert wie die erste Zeile in Ausdruck in der ORDER BY - Klausel verwendet wird, hat.Beachten Sie, wie Martin Smith in einem Kommentar betont hat, dass alle Zeilen zurückgegeben werden, wenn Sie nach einer Stadt fragen, die in der Tabelle nicht vorhanden ist.
Wenn Sie keine Angst vor den XML-Dingen von Datenbanken haben, können Sie ein Prädikat in der node () -Funktion verwenden.
Das Setup von Paul White ausleihen.
Eine andere Version mit
top
undorder by
das funktioniert eigentlich bei der Suche nach nicht existierenden Städten.quelle
Sie haben hier zwei verschiedene Dinge.
Beschränkt die Anzahl der Zeilen, die Sie zurückerhalten, auf die Zeilen, in denen town = ist
Townsville
Wird das Literal
Townsville
an eine aufgerufene Funktion übergebentown
. Die von der Abfrage zurückgegebenen Zeilen werden nicht eingeschränkt. Wenn die Funktion nur einen einzigen Wert zurückgibt, wird ein Fehler angezeigt.Es gibt andere Möglichkeiten, die Anzahl der Zeilen zu beschränken, die Sie von einer Abfrage zurückerhalten. Die HAVING-Klausel zum Beispiel. Es gibt aber noch einige andere Anforderungen.
Oder einen INNER JOIN, obwohl dieser etwas seltsam ist, wenn Sie keinen zweiten Tisch haben.
quelle
Hier ist ein Beispiel mit einem allgemeinen Tabellenausdruck (CTE).
quelle
Nun, du könntest das tun:
Genau genommen verwenden Sie die WHERE-Klausel nicht
quelle
Hier ist ein
idiotischer,ganz logischer Weg, den ich noch nicht sehe ...Ich kann mir nicht vorstellen, warum dies nicht als erstes vorgeschlagen wurde. :)
quelle
Alle Städte außer Townsville wären null. Problem gelöst.
quelle