2013-08-29 3 views
4

У меня есть один запрос, в котором я использую метод stuff. Он работает нормально, но только в одном условии повторяет одни и те же данные.Как использовать группу внутри Stuff in Sql Server

Запрос: -

select fr.repairid, fr.repairName, fr.labourMins, fr.sortOrder, 
    stuff(
     (
     select ' ---> ' + groupname,departmentid 
     from tblRepairGroup 
     where departmentid in(5,6) 
     for XML PATH(''),TYPE 
    ).value('.','NVARCHAR(MAX)'), 
     1, 5, '' 
    ) as allgroup 
from tblFlatRateRepair fr 
inner join 
    tblRepairGroup g 
    on fr.parentGroupID = g.groupID 
where fr.repairid in (2,4); 

Выход: -

enter image description here

Это просто повторить allgroup как для отдела в allgroup колонке, которая не right.It должна показывать только это собственная группа на отдел. Я знаю, что мне нужен group by этот запрос специалистом, но не смог выполнить эту задачу.

Мне нужно, чтобы показать мой выход для вышеупомянутого запроса как enter image description here

здесь не буду повторять allgroup как для отдела.

Примечание: - Этот запрос отлично подходит для одного отдела.

Пожалуйста, попробуйте помочь мне правильно этот запрос ..

+1

Мне кажется, что проблема заключается в XML, а не в методе stuff. Если вы используете это, чтобы конкатрировать столбцы в одной строке, вы можете попытаться использовать функцию, тогда вы можете группировать по ведомству и связывать его с основным запросом * перед * использованием материала – Zelloss

ответ

1

Вы должны связать внутренний запрос (в функции STUFF) для внешнего запроса: у вас есть соединение, но не прилагая к этот внутренний оператор SELECT, поэтому функция STUFF всегда работает с первой найденной ею записью, а не с соответствующей записью. Поместите это после того, как "WHERE DepartmentID IN (5,6)":

AND groupID = fr.ParentGroupID 

Тогда вы, вероятно, может удалить, что РЕГИСТРИРУЙТЕСЬ полностью.

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