SQL将兼容性矩阵转换为映射表(列成行)

时间:2017-09-09 16:57:11

标签: sql sql-server tsql

我有下表:

enter image description here

我想将矩阵转换为这种格式:

enter image description here

其中新映射表表示一组选项与使用这些选项的一组模型之间的兼容性,而数值表示该特定模型的选项价格。

请记住,这只是来自更大表的一小部分示例,因此查询需要或多或少是动态的,而不是基于此示例中提供的选项或模型的数量进行硬编码。

有谁知道我怎么做到这一点?

致以最诚挚的问候,

2 个答案:

答案 0 :(得分:3)

UnPivot或Gordon的答案会更高效,但这里有一个选项可以“动态”取消您的数据或查询,而无需实际使用动态SQL。

示例

img

<强>返回

enter image description here

答案 1 :(得分:1)

我喜欢使用outer apply执行此操作:

select v.*
from t outer apply
     (values (option_id, 'model1', model1),
             (option_id, 'model2', model2),
             (option_id, 'model3', model3)
     ) v(option_id, model_name, price);

您只需在最终表格中为每个项目的values列表添加更多行。

您也可以使用union allcross join / caseunpivot执行此操作。

但是,此方法使用横向连接,这些也非常强大,可用于其他目的。这是值得掌握的语法。

编辑:

我不确定&#34;动态&#34;意味着在这种情况下。你的表有列,或者它没有。您可以使用动态SQL根据输入参数或单个表的布局生成代码。它将遵循与上述相同的逻辑。