我得到的数据如下:
╔═════════╦═════════╦═════════╦══════════════╦══════════════╦══════════════╗
║ option1 ║ option2 ║ option3 ║ percent_opt1 ║ percent_opt2 ║ percent_opt3 ║
╠═════════╬═════════╬═════════╬══════════════╬══════════════╬══════════════╣
║ 10 ║ 4 ║ 1 ║ 0.67 ║ 0.27 ║ 0.07 ║
╚═════════╩═════════╩═════════╩══════════════╩══════════════╩══════════════╝
所以,如果我想让前三个列标题行值,然后其他的也作为更多的行值,我该怎么做呢?
这就是我的意思:
╔═════════╦════════╦═════════════╗
║ options ║ values ║ percentages ║
╠═════════╬════════╬═════════════╣
║ option1 ║ 10 ║ 0.67 ║
╠═════════╬════════╬═════════════╣
║ option2 ║ 4 ║ 0.27 ║
╠═════════╬════════╬═════════════╣
║ option3 ║ 1 ║ 0.07 ║
╚═════════╩════════╩═════════════╝
下面是我使用的代码:
declare @tbl as table (
option1 numeric(18,0),
option2 numeric(18,0),
option3 numeric(18,0),
per_opt1 numeric(18,2),
per_opt2 numeric(18,2),
per_opt3 numeric(18,2)
)
insert into @tbl
values (10,4,1,0.67,0.27,0.07)
;
select * from
(
select t.[option1],t.[option2],t.[option3]
from @tbl as t
) as srctbl
unpivot (
val for options in (option1,option2,option3)
) as unpiv
我不知道如何使最后三个百分比列值成为行值,部分原因是我不能有不同的数据类型,而且我不知道如何。
有什么建议吗?
2条答案
按热度按时间mftmpeh81#
使用
apply
:注:
values
是sql关键字,所以我更改了中间列的名称。在我看来,没有任何理由去学习
unpivot
. 它是定制的功能——在少量数据库中的扩展——以“好的”方式只做一件事。另一方面,
apply
支持标准的横向联接(即使不同数据库的语法不同)。他们是非常强大的,取消激励是一个很好的方式开始了解他们。n3ipq98p2#
在sql server中使用一个称为
apply
:db小提琴演示:
请注意
values
是sql关键字-我将列重命名为vals
在结果集中。