In MS SQL Server 2005 schreibe ich eine Abfrage mit bedingter Sortierung und mein Problem ist, dass ich nicht weiß, wie ich bedingte Sortierung mit zwei Spalten durchführen kann.
Wenn ich solchen Code geschrieben habe, funktioniert er normal
select
*
from
table
order by
case @pkr
when 'kol' then kol
when 'nci' then nci
end
Ich weiß nicht, wie ich zwei oder mehr Spalten bedingt bestellen soll
select
*
from
table
order by
case @pkr
when 'KOL-NCI' then kol,nci
when 'kol-MPCI' then kol,mpci
end
Es gibt eine Idee, dynamisches TSQL zu erstellen und zu verwenden, sp_executesql
aber ich suche immer noch nach einer besseren Idee?
sql-server
order-by
Adoptilot
quelle
quelle
CASE
auf diesen Fall angewendet werden.Antworten:
Ich gebe zu, dass ich das noch nie zuvor machen musste, also war ein bisschen Kopfkratzen dabei. Einfache Beispieltabelle zur Demonstration:
Bei Verwendung eines @ SortStyle-Parameters zur Unterscheidung zwischen Sortierreihenfolgen wird @SortStyle = 1 nach
col1 ASC, col2 DESC
und @ SortStyle = 2 nach sortierencol2 DESC, col1 ASC
.Wie Sie nach einem Parameter bestellen, behandelt den einfacheren Fall des Sortierens nach nur einer Spalte.
quelle
Angenommen, Sie haben mehr Fälle (ich habe einen hinzugefügt) und alle Typen sind kompatibel.
Es ist keine mehrspaltige Sortierung: Sie haben eine primäre Sortierung, gefolgt von einer sekundären Sortierung. Schauen Sie sich einfach das Sortierdialogfeld in Excel an, um zu sehen, was ich meine.
quelle
Mit dem Beispiel, das Sie geben, ist es einfach:
Es ist immer schön, dynamisches SQL nach Möglichkeit zu vermeiden
quelle