2016-11-04 4 views
0

ich eine SQL-AbfrageSQL-Abfrage eine Reihe und Konto für fehlende Zahlen zeigen

SELECT 
    Group_Id, MIN(Rec_Number) as RecStart, MAX(Rec_Number) AS RecEnd 
FROM 
    Rec 
WHERE 
    Group_Id != '' 
GROUP BY 
    Group_Id 
ORDER BY 
    Group_Id 

Daraus ergibt sich die folgende Art der Ergebnisse haben.

Wenn jedoch Datensatz 3 fehlt (in der ersten Zeile zum Beispiel), wird die Abfrage offensichtlich nicht berücksichtigt. Was ich versuche, ist das folgende

92-2274 9222740001 9222740002 
92-2274 9222740004 9222740018 
92-2275 9222750001 9222750016 
92-2275 9222750018 9222750026 
etc... 

So im Wesentlichen jedes Mal zu tun, das Skript einen Datensatz innerhalb der Gruppe fehlt sieht es beginnt eine neue Zeile, während in der Gruppe bleiben, bevor sie auf der nächsten Gruppe iterieren. Die group_Id ist natürlich die ersten 6 Ziffern der rec_Number

würde ich auch diese gerne auch

92-2274  0001  0002 
92-2274  0003  0004 

tun oder sogar schneiden Sie es auf und entfernen die führende 0en auch, wenn möglich Ich weiß, über die Verwendung von Right (Rec_Number, 4) aber da dies ein Float ist, scheint die automatische Umwandlung in eine Zeichenfolge etwas zu verwirren, da ich +009 viele Spalten habe, also nehme ich an, dass ich zuerst oder etwas casten muss. Diese spezielle Funktion könnte ich Excel nach der Tatsache, aber ich bin sicher, SQL könnte es tun, wenn der Typ die Abfrage schreiben war ein DBA und nicht ein unbeholfener Server-Admin (das bin ich!)

So gibt es eine Ich muss Sie warnen, dass das Standard-CTE oder die Verwendung von Funktionen wie Zeilennummer nicht funktionieren, da dies SQL Server 2000 ist - ja, es ist so alt!

Daher kämpfe ich um Beiträge auf Stack Overflow zu finden, die zutreffen. Viele von ihnen beginnen mit dem WITH-Schlüsselwort, was bedeutet, dass ich keines davon für den Anfang verwenden kann!

Ich denke, ich brauche eine IF ELse Art von Block, aber ich bin nicht sicher, welche Art von Methode kann ich verwenden, um die Abfrage zum Erstellen einer neuen Zeile jedes Mal eine fehlende gleichzeitige Anzahl im Gruppenbereich trifft.

Die endgültige Ausgabe zeigt mir die Bereiche der Datensätze in jeder Gruppe, während die fehlenden über eine neue Zeile jedes Mal hervorheben.

+0

SQL Server 2000, aber ich benutze SSMS 2014 die Datenbank ist MS SQL 2000 –

+0

Aktualisieren Sie Ihre Datenbank. Sie verwenden eine Datenbank, die seit April 2013 nicht mehr unterstützt wird. Zeit für ein Upgrade! –

+0

Ich wünschte, ich könnte mir vertrauen, aber ich habe diese Option im Moment nicht, da es nicht meine Software ist. –

Antwort

0

Für den zweiten Teil sollte diese Arbeit:

RIGHT (CAST (MIN (Rec_Number) as Decimal(10)), 4) 

Es werden die letzten vier Zeichen Ihrer Nummer nur halten.

+0

Hallo habe ich einen arithmetischen Fehler, aber ich habe es geschafft –

+0

RECHTS (CAST (MIN (Rec_Number) als Dezimal (10)), 4) –

+0

Danke für Ihren Code, obwohl ich denke, die Spalte ist ein Schwimmer, so dass es außer Reichweite kam Ich denke, bizarrerweise musste ich –

Verwandte Themen