Как преобразовать несколько строк в одну в SSRS?

Мой запрос MSSQL sql показывает данные иерархии сотрудников с кодами авторизации, как показано ниже.

ManagerName     EmployeeName    AuthCode
Tim             Peter           csr2
Tim             Peter           sup
Tim             Peter           itil
Tim             Colt            csr2
Tim             Colt            sup

 Отчет SSRS показывает результаты, перечисленные ниже, когда я выбрал отчет параметр = Tim, результат показывает только верхнюю строку, а не последующие AuthCodes, тогда как запрос показывает все

EmployeeName    AuthCode
Peter           csr2
Colt            csr2

 Я хочу, чтобы данные выглядели так (они должны объединять коды авторизации для сотрудников):

EmployeeName    AuthCode
Peter           csr2, sup, itil
Colt            csr2, sup

Может ли кто-нибудь предложить, что мне нужно делать в SSRS, чтобы данные отображали все коды авторизации со значениями, разделенными запятыми?


person Geetanjali Sachdeva    schedule 13.04.2016    source источник
comment
Возможный дубликат имитации функции MySQL group_concat в SQL Server?   -  person Tab Alleman    schedule 13.04.2016
comment
@GeetanjaliSachdeva, проверьте это   -  person alejandro zuleta    schedule 14.04.2016


Ответы (2)


Это должно работать:

=JOIN(LOOKUPSET(Fields!EmployeeName.Value, Fields!EmployeeName.Value, Fields!AuthCode.Value, "DataSet1"), ", ")

LookupSet получает все AuthCodes на основе EmployeeName.

ПРИСОЕДИНИТЬ преобразует массив в строку с использованием разделителя-запятой.

person Hannover Fist    schedule 13.04.2016
comment
+ Hannover Fist Спасибо! Это работает, но я все еще вижу некоторые коды авторизации, которые дублируются в ячейке для одного и того же сотрудника. Как избавиться от дубликатов? - person Geetanjali Sachdeva; 14.04.2016
comment
К сожалению, ни JOIN, ни LookupSet не могут обрабатывать дубликаты. Можете ли вы сделать ваши данные ОТЛИЧИТЕЛЬНЫМИ? В противном случае вам понадобится специальный код VB для анализа дубликатов. - person Hannover Fist; 14.04.2016

Некоторое дополнение к ответу Hannover Fist:
Если вам нужен отдельный результат вашего соединения + поиска, вы можете

Перейдите в свойства своего отчета - ›Code вкладка

Добавьте код VB в свойства отчета

Public Shared Function RemoveDuplicates(m_Array As Object()) As String()

    System.Array.Sort(m_Array)
    Dim k As Integer = 0
    For i As Integer = 0 To m_Array.Length - 1
        If i > 0 AndAlso m_Array(i).Equals(m_Array(i - 1)) Then
            Continue For
        End If
        m_Array(k) = m_Array(i)
        k += 1
    Next

    Dim unique As [String]() = New [String](k - 1) {}
    System.Array.Copy(m_Array, 0, unique, 0, k)
    Return unique

End Function

и отредактируйте выражение ячейки:

=JOIN( Code.RemoveDuplicates( LOOKUPSET(Fields!EmployeeName.Value, Fields!EmployeeName.Value, Fields!AuthCode.Value, "DataSet1")), ", ")
person Andrey Kormilitsyn    schedule 22.11.2019