【问题标题】:Using STUFF Function使用 STUFF 函数
【发布时间】:2020-02-05 11:49:52
【问题描述】:

我有这张表 TableA,它有以下字段:[intIdEntidad]、[intIdEjercicio]、[idTipoGrupoCons]。 tableA 看起来像 idTipoGrupoCons = 16 这个图像 enter image description here

我正在尝试使用 STUFF 函数来显示以逗号分隔的 intIdEjercicio 列,类似这样; enter image description here

这是我用来获取上图结果的查询:

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 

结果是这样的 enter image description here

这意味着对于 intIdEntidad = 50 intIdEjercicio 仅为 7 而对于 intIdEntidad = 45 intIdEjercicio = 2 和 4

我想问题是我需要在 STUFF 或外部 WHERE 中添加子查询或函数,以便每次调用 STUFF 函数时向 intIdEntidad 添加条件。

我已经阅读了 CROSS APPLY 的使用方法,也许它可以用来解决问题

【问题讨论】:

    标签: subquery cross-apply


    【解决方案1】:

    这就是答案。 问题是需要将带有同一张表的 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
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      相关资源
      最近更新 更多