2016-10-05 2 views
0

У меня есть требование, как показано ниже:число Re строк запрос

Студенты и родители войти в детали должно быть почта объединена, чтобы отправить письма

На нашей базе большинства студентов имеет одну родительский контакт и лишь немногие из них 2

Я пишу запрос (ниже), чтобы предоставить подробную информацию о студентах и ​​родителях вместе с именем пользователя - StudentID_1 или StudentID_2 (в зависимости от отсутствия родителей) сгенерированный пароль.

Что бы мы делать, если студент имеет одного родителя, то только их контактные данные должны отображаться в моем запросе вместо дополнительных идентификаторов

Я изо все силы, чтобы добиться этого в моем запросе, так что любая помощь очень очень признателен.

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 

Так однажды я присоединюсь свой оригинальный запрос к таблице Родители портала я вижу, как показано ниже

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 

т.е. Даже если студент 2 родителей результаты получать в два раза (4 строки вместо 2)

Любые идеи или предложения, как я могу ограничить повторяющиеся строки?

Благодаря Ар

ответ

1

Вы можете использовать RANK() OVER (PARTITION По StudID приказа) в общем выражении таблицы или вложенный запрос, а затем фильтровать только ранг = 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 

См windows documentation подробности

+0

Спасибо за ваш reply..But Я получаю ниже ошибки: Msg 102, состояние 1, строка 12: Неправильный синтаксис около «)» –

+1

пытаются добавить постепенно каждый столбец в CTE и main также выберите, чтобы выяснить, в чем проблема. Аналогичное решение можно найти здесь (http://sqlfiddle.com/#!6/ccbc7/8) – user2299547

Смежные вопросы