Использование функции STUFF - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть таблица TableA с полями: [intIdEntidad], [intIdEjercicio], [idTipoGrupoCons]. ТаблицаA выглядит как idTipoGrupoCons = 16 это изображение введите описание изображения здесь

Я пытаюсь использовать функцию STUFF, чтобы показать столбец intIdEjercicio, разделенный комой, что-то вроде этого; введите описание изображения здесь

Это запрос, который я использую для получения результата на изображении выше:

SELECT DISTINCT o.idTipoGrupoCons, o.intIdEntidad, ejercicios= STUFF((
    SELECT ', ' + CONVERT(VARCHAR,a.intIdEjercicio)
    FROM dbo.[tbEntidades_Privadas_InfoAdicionalGrupo] AS a
   WHERE a.idTipoGrupoCons = 16 
    FOR XML PATH, TYPE).value(N'.[1]', N'varchar(max)'), 1, 2, '')
FROM [tbEntidades_Privadas_InfoAdicionalGrupo] AS o
JOIN tbEntidades_Privadas p On O.intIdEntidad = p.intIdEntidad 
WHERE o.idTipoGrupoCons = 16

Результат не верный, потому что я выполняю это запрос для idTipoGrupoCons = 16

SELECT [idTipoGrupoCons], [intIdEntidad],[intIdEjercicio]
       FROM  [tbEntidades_Privadas_InfoAdicionalGrupo] A 
       WHERE A.idTipoGrupoCons = 16 

В результате это введите описание изображения здесь

Это означает, что для intIdEntidad = 50 intIdEjercicio только 7, а для intIdEntidad = 45 intIdEjercicio = 2 и 4

Я предполагаю, что проблема в том, что мне нужно добавить подзапрос или функцию в STUFF или во внешнее WHERE, чтобы каждый раз добавлять условие в intIdEntidad для вызова функции STUFF.

Я читал об использовании CROSS APPLY и, возможно, его можно использовать для решения проблемы

1 Ответ

0 голосов
/ 05 февраля 2020

Вот ответ. Проблема была в том, что нужно объединить tableA с той же таблицей в функцию STUFF. В конце запрос выглядит так:

SELECT  t1.idTipoGrupoCons, t1.intIdEntidad,
        ,ejercicios =   STUFF(
                                    (SELECT ', ' + t3.Ejercicio
                                       FROM [tbEntidades_Privadas_InfoAdicionalGrupo] t2
                                       JOIN tbMtoNoRegistro_Ejercicios t3 ON t2.intIdEjercicio = e.intEjercicio
                                      WHERE t2.idTipoGrupoCons = t1.idTipoGrupoCons
                                        AND t2.intIdEntidad    = t1.intIdEntidad
                                     ORDER BY t3.Ejercicio
                                        FOR XML PATH ('')
                                    )
                            ,1,2,'')
   FROM [tbEntidades_Privadas_InfoAdicionalGrupo] t1
   JOIN tbEntidades_Privadas p ON t1.intIdEntidad = p.intIdEntidad
    WHERE t1.idTipoGrupoCons = 17
  GROUP BY t1.idTipoGrupoCons,t1.intIdEntidad, p.strDenominacionSocial
...