2016-07-21 2 views
0

Ich habe eine Datenbank in SQL Server-Konsole C# erstellt, wo es verschiedene Gruppen zu einer Reihe hinzugefügt vertikal, zB G1, G2, G3 usw.T-SQL bleibt nicht um

Das ist ok für das, was benötigt wird, jedoch, wenn ein Wert wie so G10 hinzugefügt wird, es sich automatisch unter G1 setzen, so dass anstelle von

G1 
G2 
G3 
G10 

es sieht wie folgt aus:

G1 
G10 
G2 
G3 

habe ich versucht, die folgende Abfrage

SELECT * 
FROM mondayTable 
ORDER BY SAAT ASC 

und

ORDER BY SAAT DESC 

aber es bleibt immer noch in der gleichen Reihenfolge, aber von oben nach unten, von unten nach oben. Hier

ist ein Screenshot von dem, was es sieht aus wie mit ORDER BY DESC:

enter image description here

+1

ist das Format der 'SAAT'-Spalte fest, also ein Alphabet, gefolgt von einer Zahl? –

+2

Dies liegt daran, dass die SAAT-Spalte alphabetisch ist, daher ist die Sortierung alphabetisch, nicht numerisch. – Kevin

+3

Da 'G' Zeichen in der Spalte sind, muss es vermutlich vom Datentyp' varchar' sein - und als ** String ** ist es ** korrekt ** angeordnet. –

Antwort

3

Wie commen wies darauf hin, es ist, weil Ihre Daten alphabetisch ist so die Art ist richtig. Sie könnten etwas wie folgt verwenden:

+0

Wow! wie ist es damit! Danke Squillman für die Hilfe :) Ich ärgere dich nicht, kannst du mir erklären, wie deine Antwort funktioniert? Ich will nicht eine Kontrolle sein c Kontrolle junkie :) – Werdna

+0

@Werdna Die ORDER BY Streifen die numerischen Zeichen und wandelt sie als Integer-Wert. Da der Integer-Wert numerisch ist, liefert er die gesuchte Sortierung. Dies setzt ein einzelnes Zeichen im String-Wert am Anfang voraus und die numerischen Zeichen beginnen bei Position 2. – squillman

+0

Danke Squillman für die Erklärung, dass ich jetzt verstehe, nochmals danke, ich hoffe du hast ein schönes Wochenende :) – Werdna

0

Dies ist normales Verhalten, weil Sie nach Zeichen sortieren. Um es in Ordnung zu bringen, würde ich die Zahlen nach dem "G" auffüllen.

Zum Beispiel:

G01
G02
G03
G04
G05
G06
G07
G08
G09
G10
G11

OR, wenn er Sie die Zahlen

G0001
G0002
G0003
G0004
G0005
G0006
G0007
G0008
G0009
G0010
G0011

in die 1000 gehen

ein einfacher Weg zum Pad ist

SELECT 'G' + RIGHT ('000' + CAST (2 als VARCHAR (4)), 4)

SELECT 'G' + RIGHT ('000' + CAST (11 als VARCHAR (4)), 4)

Diese

G0002
G0011

Eine weitere Möglichkeit, im Auftrag tun könnte wie dies

ORDER BY CAST (REPLACE (SAAT, 'G' generieren,‘ ') AS INT) ASC