You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何将同一产品的多行图片路径合并为多列?求解决方案

实现产品图片路径的行转列需求

可以实现这个需求,这属于SQL中的行转列场景,针对每个产品固定最多3张图片的情况,我们可以通过窗口函数结合条件聚合的方式完成转换。

表结构示例

image_tbl表

----------------------------
| prdctCode |  imgPath     |
| P0003     |  P0003-1.jpg |
| P0003     |  P0003-2.jpg |
| P0003     |  P0003-3.jpg |
| P0004     |  P0004-1.jpg |
| P0004     |  P0004-2.jpg |
| P0004     |  P0004-3.jpg |
----------------------------

product_tbl表

-------------------------
| prdctCode | prdctName |
| P0003     | Hand Bag  |
| P0004     | Pencil    |
-------------------------

解决方法

核心思路是先给每个产品下的图片按顺序编号,再通过条件聚合将不同编号的图片路径映射到单独的列中,具体SQL代码如下:

SELECT
    prdTbl.prdctCode,
    prdTbl.prdctName,
    MAX(CASE WHEN imgRank = 1 THEN imgTbl.imgPath END) AS imgPath1,
    MAX(CASE WHEN imgRank = 2 THEN imgTbl.imgPath END) AS imgPath2,
    MAX(CASE WHEN imgRank = 3 THEN imgTbl.imgPath END) AS imgPath3
FROM
    [product_tbl] prdTbl
LEFT JOIN (
    -- 给每个产品的图片添加顺序编号
    SELECT
        prdctCode,
        imgPath,
        ROW_NUMBER() OVER (PARTITION BY prdctCode ORDER BY imgPath) AS imgRank
    FROM [image_tbl]
) imgTbl ON prdTbl.prdctCode = imgTbl.prdctCode
GROUP BY
    prdTbl.prdctCode, prdTbl.prdctName;

代码说明

  1. 子查询部分:使用ROW_NUMBER()窗口函数,按prdctCode分组,再按imgPath排序,给每个产品下的图片分配1、2、3的编号(imgRank)。
  2. 条件聚合:外层查询通过MAX(CASE ...)的方式,将对应编号的图片路径提取到对应的列中;使用MAX是为了在分组后保留有效数据,避免NULL干扰。
  3. LEFT JOIN:保持原查询的左连接逻辑,确保即使产品没有图片,也能在结果中保留产品信息,对应图片列会显示为NULL。

执行上述SQL后,即可得到你预期的每行对应单个产品、图片路径分列展示的结果。

内容的提问来源于stack exchange,提问作者user20066177

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:25:17