TSQL如何将分组表中的联接表中的列连接起来

缺口

我有2个相连的表:产品和产品_相关产品

    Producto                Productos_ProductosRelacionados
|id|referencia|         |id|idProducto|idProductoRelacionado|
|1 |    A     |         |1 |    1     |  2                  |
|2 |    B     |         |2 |    1     |  3                  |
|3 |    C     |         |3 |    3     |  4                  |
|4 |    D     |         |4 |    3     |  5                  |
|5 |    E     |

我需要这个:

|idProducto|referencia|
|   1      |  B,C     | 
|   2      |          | 
|   3      |  D,E     |

我有较旧的SQL Server,因此无法使用STRING_AGG到目前为止,我只实现了串联idProductoRelacionado

|idProducto|idProductoRelacionado|
|   1      |  2,3                |

与:

SELECT pr1.idProducto
 ,STUFF((
          SELECT ',' + CONVERT(varchar, pr.idProductoRelacionado) 
          FROM [Productos_ProductosRelacionados] as pr
          WHERE pr.idProducto = pr1.idProducto        
          FOR XML PATH('')), 1, 1, '') as RelacionadosID
 FROM [dbo].[Producto] as p1 
 join [Productos_ProductosRelacionados] as pr1 on p1.id = pr1.idProductoRelacionado
 GROUP BY pr1.idProducto

如果我尝试使用相同的方法来连接Referencia列,则会给我:“列'dbo.Producto.id'在选择列表中无效,因为它既不包含在聚合函数中也不包含在GROUP BY子句中。”

select pr1.idProducto
,STUFF((
          SELECT ',' + p.referencia
          FROM [dbo].[Producto] as p
          WHERE p.id = p1.id  
          FOR XML PATH('')), 1, 1, '') as RelacionadosREF
 from [dbo].[Producto] as p1 
 join [Productos_ProductosRelacionados] as pr1 on p1.id = pr1.idProductoRelacionado
 GROUP BY pr1.idProducto

我不明白两个查询之间的区别,为什么第一个查询有效而第二个查询无效。

哈里

简单联接应该起作用。检查SQLFiddle

SELECT 
  id,
  (SELECT
     cast (p1.referencia as varchar(100)) + ','
   FROM producto p
   LEFT JOIN Productos_ProductosRelacionados pr
         on pr.idProduct = p.id
   LEFT JOIN producto p1
         on p1.id = pr.idProductoRelacionado
   WHERE p.id = src.id
   FOR XML PATH('')) as referencia
FROM
   producto src;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将列表与 linq 中的表连接起来

如何将codeigniter中的两个表与jquery数据表连接起来

如何将MOSS 2007列表与SSRS连接起来?

如何将一张表上的 3 列与另一张表中的 1 列连接起来?

如何将一列中的值连接起来?

如何将每个ID的3列中的值连接起来?

如何将基本表与其特定角色变化表连接起来?

将 3 个表与其他表中的多个值连接起来

Oracle - 如何将表与 JSON 数据连接起来?

如何将表单中的字段与 Twig 中的 var 连接起来?

将列名与其他表中的值连接起来

将浮点列表与表中的字符串列表连接起来

创建新的表,将许多记录中的字段连接起来

如何将Excel中的日期列与保持原始日期完整的另一列连接起来?

如何将列与sql中具有相同名称的列连接起来?

根据条件将不同表中的列连接起来

如何将随机字符中的字符串与列表连接起来?

如何将zeit中运行的node.js与Postgresql连接起来?

如何将硬编码文本与标签中的绑定文本连接起来?

如何将搜索与我的react组件中的List连接起来?

如何将字符串与列表项中的列表连接起来?

如何将数值与水晶报表公式中的 URL 连接起来

如何将海龟对象与 python 中的类的实例连接起来?

如何将两个表与引用 SQL Server 中第二个表中同一列的两列连接起来

在SQL查询中,如何通过标识将具有不同类型的表的所有列及其值连接起来?

通过聚合将表自身连接起来

将表与子查询结果连接起来

如何将Charles与IntelliJ连接起来?

如何将odoo与体式连接起来?