gpt4 book ai didi

SQL Server 枢轴?将列名设置为行内值的某种方法

转载 作者:行者123 更新时间:2023-12-04 22:49:22 25 4
gpt4 key购买 nike

我正在构建一个包含多个跟踪器的系统,这些跟踪器将使用许多相同的列,因此当用户插入跟踪器时,有一个用于跟踪器的表、跟踪器列,然后是哪些列与哪个跟踪器搭配的交叉引用row 不同的列值存储在共享相同记录 ID 的多行中,并存储特定列的值和名称。

我需要找到一种方法将值的列名动态更改为存储在同一行中的列名。

IE。

id | value | name
------------------
23 | red | color
23 | fast | speed

需要看起来像这样。
id | color | speed
------------------
23 | red | fast

非常感谢任何帮助,谢谢。

最佳答案

您可以使用 PIVOT 执行此类查询。 .有两种方法,一种是对列的值进行硬编码的静态枢轴,另一种是在运行时确定列的动态枢轴。

静态枢轴 (见 SQL Fiddle with Demo)

select *
from
(
select id, value, name
from test
) x
pivot
(
min(value)
for name in ([color], [speed])
) p

动态枢轴 (见 SQL Fiddle with Demo)
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(name)
from test
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')


set @query
= 'SELECT id,' + @cols + ' from
(
SELECT id, value, name
FROM test
) x
pivot
(
min(value)
for name in (' + @cols + ')
) p '

execute(@query)

这两个查询将产生相同的结果。不同之处在于,首先您必须对要成为列的所有值进行编码。

关于SQL Server 枢轴?将列名设置为行内值的某种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11300428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com