Mit verschiedenen order by-union
Möchte ich eine Abfrage schreiben, wie
select top 10 * from A
order by price
union
select top 3 * from A
order by price
oder sth like,
select top 10 * from A
where name like '%smt%'
order by price
union
select top 3 * from A
where name not like '%smt%'
order by price
Können Sie mir bitte helfen?
- In welcher Reihenfolge wollen Sie das Ergebnis? Wenn es Zeilen sind, erscheinen in beiden subselects, sollten Sie zweimal in das Endergebnis oder nur einmal?
- Ich denke, dies sollte wirklich 2 getrennte Abfragen...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte dies funktionieren:
Vom MSDN:
Bearbeitet: zu zwingen, die Reihenfolge, die Sie brauchen, um eine
ORDER BY
zu der äußeren Abfrage. Ich habe einen Konstanten Wert-Spalte die beiden Abfragen.UNION ALL
(nochUNION
), es sei denn, es hat eineORDER BY
- Klausel angewendet.ORDER BY
auf der äußeren Abfrage verwendet wird, können Sie davon ausgehen nichts über die endgültigen ErgebnisseORDER BY
unabhängig von meiner innerenORDER BY
Aussagen sogar mit den einfachsten sample-Daten (10 Zeilen, 3 Spalten). Jemand habe irgendwelche Gedanken zu dieser? Vielleicht ist es arbeiteten im Jahr 2012, aber scheint nicht mehr zu funktionieren: sqlfiddle.com/#!18/4fe69c/1ORDER BY
innerhalb von Unterabfragen, etc, ist allein da, um zu helfen, definieren andere Teile der Sprache wieTOP
. Deshalb sind Sie daran gehindert, es allein. Nie war es bedeutete zu arbeiten, aber die Menschen weiterhin zu hausieren Mythen über stabilen Ordnung, ohne mit dem tool, das Sie gemeint sind zu verwenden -ORDER BY
auf der äußersten Abfrage.Dies ist eine echte hacky Weg, dies zu tun. Wahrscheinlich möchten Sie diese als separate Abfragen in der Realität, aber das sollte geben Sie das Ergebnis das Sie wollen...
UNION nicht wie der ORDER by-Klauseln in der Vereint Ausdrücke.
Versuchen Sie dies:
Dieser fälscht den UNION-operator in ignorieren die ORDER BYs, die noch richtig arbeiten, auf dem TOP-operator.
Sie können sich bewerben, eine endgültige BESTELLUNG DURCH die Bestellung der Vereint festlegen, wenn Sie möchten.
[Nicht mehr gilt genau nun deine Frage, dass es bearbeitet!]
cmd.CommandText = "SELECT 0 AS Feld "employee_id", "Kein Mitarbeiter" als Employee_FullName , 'id1' Orderkey
UNION ALL
WÄHLEN Sie "Feld " employee_id", Employee_FullName, 'id2' Orderkey
VON tblEmployee
UM VON Orderkey, Employee_FullName"
ds = dbconn.SelectQuery(cmd)
ds.Tische(0).Spalten.Entfernen(ds.Tische(0).Spalten("Orderkey"))