admin

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

sql

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

切记,这只是更大的表中的一个小样本,因此查询需要或多或少是动态的,并且不基于此示例中提供的选项或模型的数量进行硬编码。

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

最好的祝福,


阅读 144

收藏
2021-06-07

共1个答案

admin

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

例子

Select A.OptionID
      ,ModelName  = C.Item
      ,Price      = C.Value
 From  YourTable A
 Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
 Cross Apply (
                Select Item  = a.value('local-name(.)','varchar(100)')
                      ,Value = a.value('.','varchar(max)') --<< Change to desired datatype
                 From  B.XMLData.nodes('/row')  as C1(n)
                 Cross Apply C1.n.nodes('./@*') as C2(a)
                 Where a.value('local-name(.)','varchar(100)') not in ('OptionID','OtherFieldsToExclude')
             ) C
2021-06-07