2016-10-05 1 views
0

ich eine Anforderung haben, wie unten:Re Zeilennummern Abfrage

Studenten und Eltern Details anmelden müssen in der Post-Briefe senden fusionierte aus

Auf unserer Datenbank die meisten Schüler Alleinerziehende Kontakt haben und nur wenige haben 2

Ich schreibe eine Abfrage (unten), um Details von Schülern und Eltern zusammen mit Benutzername - StudentID_1 oder StudentID_2 (abhängig von keiner der Eltern) automatisch generierte Passwort zu geben.

Was würden wir tun, wenn ein Student alleinerziehende Mutter hat dann nur ihre Kontaktdaten in meiner Anfrage anstelle zusätzlicher ids zeigen, muß

Ich kämpfe dies in meiner Anfrage zu erreichen, um jede Hilfe ist sehr sehr geschätzt.

SELECT StudID, StudName, RTRIM(StudID) + '_1' AS Parent_Username, CAST(ABS(CHECKSUM(NEWID())) % 10 AS VARCHAR(1)) 
+ CHAR(ASCII('a') + ABS(CHECKSUM(NEWID())) % 25) + CHAR(ASCII('A') + ABS(CHECKSUM(NEWID())) % 25) + LEFT(NEWID(), 5) AS Parent_Password 
FROM 
Student 

StudId StudName   Gender Parent Username Parent Password 
09054828 Alexander Lewis M  09054828_1  0iCCA086 
09054828 Alexander Lewis M  09054828_1  6jI247CA 
09054828 Alexander Lewis M  09054828_1  7xA1075E 
09054828 Alexander Lewis M  09054828_1  3dFCBCCF 
09056750 Daniel O'Sullivan M  09056750_1  6tC76C96 
09057033 Daniel Geggus  M  09057033_1  9gXDB414 

And we have Parents Portal table which has below data 
StudentID Name    ParentUsername ParentPassword 
9054828 Lewis Alexander   09054828_1  l5oXYQo 
9054828 Lewis Alexander   09054828_2  70AYvbi 
9056750 O'Sullivan Daniel   09056750_1  1OnVMn0 
9056750 O'Sullivan Daniel   09056750_2  rT47Sx5 
9057033 Geggus Daniel    09057033_1  Ap6EV3v 
9057033 Geggus Daniel    09057033_2  Ar4AQ22 

Also, wenn ich Tabelle meiner ursprünglichen Abfrage Eltern Portal beitreten Ich sehe, wie unten

StudentID Name    ParentUsername ParentPassword 
09054828 Alexander Lewis M  09054828_1  0iCCA086 
09054828 Alexander Lewis M  09054828_1  6jI247CA 
09054828 Alexander Lewis M  09054828_1  7xA1075E 
09054828 Alexander Lewis M  09054828_1  3dFCBCCF 
9056750  Daniel O'Sullivan  09056750_1  1OnVMn0 
9057033  Daniel Geggus   09057033_1  Ap6EV3v 

dh Auch wenn ein Student hat zwei Eltern Ergebnisse verdoppelt zu werden (4 Zeilen anstelle von 2)

Irgendwelche Ideen oder Vorschläge, wie kann ich die wiederholenden Zeilen einschränken?

Dank Ar

Antwort

1

Sie können RANK() OVER (PARTITION By StudID Reihenfolge von) in einer gemeinsamen Tabelle Ausdruck oder einer Unterabfrage verwendet werden und nur dann, rank Filter = 1.

with query as (
SELECT 
RANK() OVER (PARTITION By StudID order by <column parent related>) as rank, 
StudID, 
StudName, 
RTRIM(StudID) + '_1' AS Parent_Username, 
CAST(
    ABS(CHECKSUM(NEWID())) % 10 AS VARCHAR(1)) 
    + CHAR(ASCII('a') + ABS(CHECKSUM(NEWID())) % 25) 
    + CHAR(ASCII('A') + ABS(CHECKSUM(NEWID())) % 25) 
    + LEFT(NEWID(), 5) AS Parent_Password 
FROM Student) 
select StudID,StudName,Parent_Username, Parent_Password from query where rank = 1 

Siehe windows documentation für Details

+0

Vielen Dank für Ihre reply..But ich unten Störung erhalte: Msg 102, Status 1, Zeile 12: falsche Syntax nahe ')' –

+1

versuchen schrittweise jede Spalte hinzufügen in CTE und main wählen Sie auch, um herauszufinden, was das Problem ist. Eine ähnliche Lösung finden Sie [hier] (http://sqlfiddle.com/#!6/ccbc7/8) – user2299547