我有一个表,其中包含具有值的属性名称,但每一行都是具有其值的属性,
项目 ID | 项目属性名称 | 项目属性值 |
---|---|---|
405 | 应用 | 高载流量连接 |
405 | 颜色 | 黄色 |
405 | 环境条件 | 防水 |
405 | 材料 | 合成的 |
406 | 应用 | 高载流量连接 |
406 | 颜色 | 蓝色的 |
406 | 材料 | 黄铜 |
所以我创建了另一个表,其中包含所有可能的属性名称以将其展平,以便每一行都包含每个项目的所有值。
项目 ID | 应用 | 颜色 | 环境条件 | 材料 |
---|---|---|---|---|
405 | 高载流量连接 | 黄色 | 防水 | 合成的 |
406 | 高载流量连接 | 蓝色的 | 木头 |
如何获取第一个表并将每个给定 itemId 的数据插入到相应列下的上表中?
我还需要考虑有超过一百个不同的属性名称,并不是所有的项目都会有每个属性或值。我不确定我应该向哪个方向解决这个问题。
上述解决方案仅在您有一定数量的属性时才有效,如果有 N 个属性,您应该为此使用动态枢轴
为了补充Biju jose已经提供的答案,这里有一种使用动态 SQL 的方法。如果您
dbo.eav
在我的示例中向表中添加新行,它们会自动转换为输出中的新列。上面的输出如下所示:
如您所见,我的输出包括 ItemId 407,其属性为“Small”。
当然,随着唯一
ItemAttributeName
值数量的增加,输出变得越宽。您似乎不太可能真的想这样做。更有可能选择特定的 ItemId 并仅显示适用的列。下面的示例建立在上面的代码之上,展示了如何动态选择特定的
ItemId
(在本例中为 407),以仅显示相关的列:其输出如下所示:
为上述输出动态生成的 T-SQL 如下所示: