请求协助:将含重复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
相关产品推荐
相关产品推荐

