我正在尝试将一个表解压为eav格式,但希望在每一行保留一些额外的元数据。
初始表
| Brand | Name | Number | Col1 | Col2 |
|-------|----------|--------|------|------|
| A | Book | #1 | 1 | 2 |
| B | Magazine | #2 | 1 | 2 |
期望输出
| Number | key | val |
|--------|-------|----------|
| #1 | Brand | A |
| #1 | Name | Book |
| #1 | Col1 | 1 |
| #1 | Col2 | 2 |
| #2 | Brand | B |
| #2 | Name | Magazine |
| #2 | Col1 | 1 |
| #2 | Col2 | 2 |
实际产量
列名“number”无效。
示例查询
select
[Number], -- How can this be selected?
[key],
[val]
from (
select
[Number],
[Brand],
[Name]
from [SomeTable]
) data
unpivot (
[val]
for [key] in (
[Brand],
[Name],
[Number],
[Col1],
[Col2]
)
) as unpiv
如何选择键值对以及相应的数字作为索引?
1条答案
按热度按时间bvk5enib1#
你可以使用
CROSS APPLY
配合一点xml如果是2016+的话,就有一种json方法,它的性能更高
例子
退货
编辑-添加json版本if 2016+