2016-03-21 10 views
1

Ich habe diese Tabelle:Benutzerdefinierte ID-Spalte in SQL Server

ID  ORDER SCNID SCANNER 
------------------------------- 
170842 85986 20  APL-1 
170843 85986 20  APL-1 
170844 85986 20  APL-1 
170845 85986 20  APL-1 
170886 86004 200  GPL-2 
170897 86011 1600 MAP-1 
170900 86011 1600 MAP-1 
170903 86011 1600 MAP-1 
170904 86011 1600 MAP-1 
170906 86011 1600 MAP-1 
170908 86011 1600 MAP-1 
170909 86011 1600 MAP-1 
170918 86024 520  NIX-3 
170922 86028 1050 OPL-3 
170923 86029 1050 OPL-3 

Ich brauche eine customorderID Spalte zu machen, für die sie wie folgt aussehen:

ID  ORDER SCNID SCANNER CUSORDERID 
-------------------------------------------- 
170842 85986 20  APL-1 85986-1 
170843 85986 20  APL-1 85986-2 
170844 85986 20  APL-1 85986-3 
170845 85986 20  APL-1 85986-4 
170886 86004 200  GPL-2 86004-1 
170897 86011 1600 MAP-1 86011-1 
170900 85986 1600 MAP-1 85986-5 
170903 86011 1600 MAP-1 86011-2 
170904 86011 1600 MAP-1 86011-3 
170906 86011 1600 MAP-1 86011-4 
170908 86011 1600 MAP-1 86011-5 
170909 86011 1600 MAP-1 86011-6 
170918 86024 520  NIX-3 86024-1 
170922 86028 1050 OPL-3 86028-1 
170923 86029 1050 OPL-3 86029-1  

Die Zeilen von ID sortiert werden & entsprechend der ID wird der erste Datensatz für eine bestimmte ORDER (zB 86011) benutzerdefinierte ORDERID 86011-1 sein, wenn irgendwelche anderen Datensätze für diesen ORDER vorhanden sind, dann wird es 86011-2 sein und so weiter.

Kann mir jemand helfen?

+1

Sie bereits einen Auftrag Feld haben, aus irgendeinem Grund Sie nicht mit einer Sequenz verwenden können, wenn sie mit dem Zusatz on the fly zu kommen Abfrage anstatt es zu speichern? Dies wird normalerweise bevorzugt, wenn Sie eine Art Datum/Zeit haben, um es zu sortieren. Ref hier: http://stackoverflow.com/questions/14359749/how-to-return-a-incremental-group-number-per-group-in-sql – jleach

+0

Ich brauche die CUSTOMODER CULUMN, die wie folgt aussieht. Wie angegeben . –

+0

Was passiert, wenn Sie '86011-1',' 86011-2' und '86011-3' haben und jemand die Zeile' 86011-2' löscht? Sollte '86011-3' neu nummerieren? Wenn nicht, sollte die nächste Zeile "86011-2" oder "86011-4" lauten? –

Antwort

1

Versuchen Sie folgendes:

with tempOrder as 
(
    select ID,[ORDER],SCNID,Scanner, ROW_NUMBER() over (partition by [ORDER] order by [ORDER], ID) as OrderNum 
    from OrderTable 
) 
Select Id,[Order],SCNID,Scanner, Str([ORDER]) +'-'+ Str(OrderNum) as CUSORDERID from tempOrder 
order by [ORDER] 
+0

Danke! Ich hatte gerade die SELECT-Anweisung von CTE für die genaue Ausgabe geändert .. Wählen Sie [Auftrag], CONVERT (VARCHAR, ([ORDER])) + '-' + CONVERT (VARCHAR, (CUSTOrderNum)) als CUSORDERID von TempOrder um by [ORDER] –

+0

@SouravMukherjee Dies wird keine gelöschten Artikel und Lücken füllen nach Ihren Anforderungen in den Fragen Kommentare behandeln. – jleach