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

请求协助:将含重复ID的Table A转置透视后与Table B关联

关联Table A与Table B并透视重复ID行

表格结构整理

根据你提供的图片,整理两个表格的结构如下:

Table A

ID属性值
101颜色红色
101尺寸大号
102颜色蓝色
102尺寸中号

Table B

ID名称类别
101衬衫上衣
102裤子下装

SQL解决方案

先对Table A进行透视,将同一ID的多行属性转为列,再与Table B关联:

WITH PivotedTableA AS (
    SELECT
        ID,
        MAX(CASE WHEN 属性 = '颜色' THEN 值 END) AS 颜色,
        MAX(CASE WHEN 属性 = '尺寸' THEN 值 END) AS 尺寸
    FROM TableA
    GROUP BY ID
)
SELECT
    b.ID,
    b.名称,
    b.类别,
    pa.颜色,
    pa.尺寸
FROM TableB b
INNER JOIN PivotedTableA pa ON b.ID = pa.ID;

如果Table A的属性不固定(可能新增其他属性),可以用动态SQL生成透视列:

DECLARE @cols NVARCHAR(MAX), @query NVARCHAR(MAX);

SELECT @cols = STRING_AGG(QUOTENAME(属性), ', ') FROM (SELECT DISTINCT 属性 FROM TableA) AS t;

SET @query = N'
WITH PivotedTableA AS (
    SELECT ID, ' + @cols + N'
    FROM TableA
    PIVOT (MAX(值) FOR 属性 IN (' + @cols + N')) AS p
)
SELECT b.*, pa.*
FROM TableB b
INNER JOIN PivotedTableA pa ON b.ID = pa.ID;';

EXEC sp_executesql @query;

Python Pandas解决方案

适合数据分析场景,代码简洁直观:

import pandas as pd

# 构建数据(替换为你的实际数据读取逻辑,比如pd.read_csv)
table_a = pd.DataFrame({
    'ID': [101, 101, 102, 102],
    '属性': ['颜色', '尺寸', '颜色', '尺寸'],
    '值': ['红色', '大号', '蓝色', '中号']
})

table_b = pd.DataFrame({
    'ID': [101, 102],
    '名称': ['衬衫', '裤子'],
    '类别': ['上衣', '下装']
})

# 透视Table A
pivoted_a = table_a.pivot(index='ID', columns='属性', values='值').reset_index()

# 关联两个表
final_result = pd.merge(table_b, pivoted_a, on='ID')

print(final_result)

执行后输出结果:

ID  名称  类别  颜色  尺寸
0  101  衬衫  上衣  红色  大号
1  102  裤子  下装  蓝色  中号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:57:24