2016-09-21 3 views
0

Ich verwende die folgende Abfrage, um eine Dropdown-Liste von Werten aufzufüllen.ORDER BY SELECT-Anweisung mit UNION & DISTINCT

select 'Select a City' as City, 'All' as Value 
UNION ALL 
select distinct City, City as Value from BND_Listing 

Ich möchte A-Z die Ergebnisse sortieren.

select 'Select a City' as City, 'All' as Value 
UNION ALL 
select distinct City, City as Value from BND_Listing 
ORDER BY City ASC 

Aber ich erhalte eine Fehlermeldung:: Ich habe folgendes versucht

Incorrect syntax near the keyword 'Union'.

Zusätzlich diese Abfrage „Blank oder NULL“ Werte zieht und einen leeren Platz an der Spitze der Drop- Anzeige Nieder. Ich würde das gerne verstecken, wenn möglich. Kein Nullwert anzeigen?

+1

Sind Sie sicher, dass Sie die richtige Abfrage angegeben haben? Es gibt keine Möglichkeit, den Fehler bei Ihrer zweiten Abfrage zu erhalten – techspider

+1

Um Leerstellen oder NULL zu vermeiden, verwenden Sie WHERE-Klausel, um sie in Ihrer Abfrage zu filtern – techspider

+0

@techspider ja die Abfrage ist korrekt. Wenn ich diese Abfrage in SQL Management Studio ausführen, funktioniert es. Bei der Eingabe in mein Formular-Plug-In erhalte ich den Fehler von Ihrem Kommentar. Es sieht so aus, als wäre es etwas auf der Plug-in-Seite, die den Fehler verursacht. Haben Sie ein Beispiel, wie Sie die NULLS herausfiltern können? – UserSN

Antwort

0

Vielen Dank für die Antworten gab es mir eine Menge Einblick, wo ich nach meinem Problem suchen. Die ursprüngliche Abfrage mit dem Zusatz von unten erreicht das richtige Ergebnis.

Arbeits query:

select 'Select a City' as City, 'All' as Value 
UNION ALL 
select distinct City, City as Value from BND_Listing 
where isnull(City,'') <> '' 
Order by City ASC 

mit 'Select a City' immer an der Spitze der Dropdown-Liste. Kredit an @ scsimon auf meinem anderen Beitrag dafür.

2

Sie möchten Ihrem Ergebnis eine Zeile hinzufügen, die immer oben steht und eine NULL als ID enthält?

Versuchen Sie folgendes:

SELECT * 
FROM 
(
    SELECT NULL AS col1,'select an object' AS col2,0 AS SortInx 
    UNION ALL 
    SELECT TOP 10 object_id,name,ROW_NUMBER() OVER(ORDER BY name) 
    FROM sys.objects 
) AS Sortable 
ORDER BY SortInx 

Kurze Erklärung: ROW_NUMBER() mit 1 beginnen, so dass die erste Reihe bekommt 0 als Sortierindex. Die Zahlen von 1 bis x repräsentieren die Reihenfolge des sortierten Namens.

Die äußere SELECT wird sortieren das Ergebnis Satz wieder sicher zu machen, dass 0 vor und 1 bis x folgende ...

+0

Sie brauchen keine äußere SELECT, da die Liste bereits mit ROW_NUMBER – techspider

+0

sortiert fehlt Wo ist nicht null – Ako

+1

@techspider Ja, aber Sie können nicht sicher sein, dass die zusätzliche Zeile wird nicht irgendwo in der Mitte erscheinen ... Auch wenn das mag zu ängstlich sein, man sollte sich niemals auf implizite Ordnung verlassen, wenn die Ordnung wichtig ist ... – Shnugo

1

ich mit den meisten Kommentaren zustimmen hier, wo der beste Ansatz ist eigentlich haben Die Zeile "Select a Value" wurde in der Anwendung selbst hinzugefügt. Es ist wahrscheinlich am besten, wenn die Datenbank nur "tatsächliche" Daten an Ihre Anwendung liefert und solche Dinge im Code behandelt.

Ich bin mir auch nicht sicher, was dieses Projekt ist, aber wenn Sie Zugriff haben, würde ich dringend empfehlen, Ansichten und/oder gespeicherte Prozeduren auf Datenbankebene zu erstellen, um alle Datenbankschema- und Logikänderungen von Ihrer Anwendung zu abstrahieren.

Nur aus Neugier, warum wählen Sie das gleiche Feld zweimal mit verschiedenen Aliasen? Ich gehe davon aus, dass Sie den Anzeigewert und den tatsächlichen Wert in einem einfachen HTML-Dropdown-Menü festlegen, aber in diesem Fall sind die Werte identisch, sodass Sie nur ein Feld in Ihrer Ergebnismenge haben und diesen Wert zweimal in der Ergebnismenge referenzieren können Anwendung. Auf diese Weise würde das Problem der ursprünglichen Frage, sowie vereinfachen Sie Ihre Abfrage lösen (obwohl eine Abfrage diese einfache vernachlässigbaren Kosten ohnehin haben wird), um wie folgt aussehen:

SELECT DISTINCT City 
FROM BND_Listing (NOLOCK) 
WHERE City IS NOT NULL 
ORDER BY 1 ASC 

auf den Daten je nach DB Config , etc, müssen Sie möglicherweise für leere Strings Konto und/oder führenden/Räume mit so etwas wie diesem Hinter:

SELECT DISTINCT LTRIM(RTRIM(City)) AS City 
FROM BND_Listing (NOLOCK) 
WHERE LTRIM(RTRIM(City)) <> '' 
    AND City IS NOT NULL 
ORDER BY 1 

Sorry ... ich weiß, dass ein wenig übertrieben gewesen sein mag, aber Sie sagen, Sie sind neu zu SQL, also dachte ich, ich würde das nur teilen, falls Ihre NULL-Ergebnisse tatsächlich leere Zeichenfolgen wären.

+0

danke für diese Beispiele. Ich versuche immer noch, meine Felder/Daten in das Suchbeispiel von Shnugo einzufügen. Ich versuche, ein Verzeichnis von Daten zu erstellen, die YP.com ähnlich sind. Ich habe 2 Tabellen 1, die Auflistungsdaten enthalten, andere, die Auflistungskategorien enthalten. Ich schreibe nicht diese ganze Anwendung in Notizblock, ich bin nicht auf dieser Ebene. – UserSN

+0

Ich benutze das DNN CMS mit 2 Modulen ActionForm & ActionGrid, die es mir ermöglichen, Schaltflächen zu erstellen und eine SQL-Abfrage auszuführen, sobald auf die Schaltfläche geklickt wird. Mit diesem habe ich mein Grid auf Abfragestrings mit einer Where-Klausel warten und ich verwende das Formular, um diese Abfrage-String-Werte übergeben, um ein "Sorted" -Verzeichnis der Informationen zu erreichen. Sortiert nach Kategorie, Stadt, Bundesland, Land. Ich hoffe, das macht viel Sinn für die Terminologie, die ich bisher gelesen habe. – UserSN

+0

Ich bin gerade dabei, auszuwählen und wo Aussagen alles andere ist noch neu für mich, also versuche ich zu verstehen, was diese Abfragen tun. Auch aufgrund der Art meines Moduls muss ich ein Beispiel weitergeben.com/Category/ALL, wenn ein Benutzer sich entscheidet, keine Option aus meiner Dropdown-Liste auszuwählen, damit Daten eingezogen werden. Hoffe, das macht Sinn. Ich habe einen anderen Beitrag mit einigen Screenshots meiner Werkzeuge hier – UserSN