gpt4 book ai didi

SQL 将具有不同值的一列转换为多列

转载 作者:行者123 更新时间:2023-12-04 20:15:31 24 4
gpt4 key购买 nike

我使用的是 SQL Server,但我不知道如何解决这个问题。我有一个包含 5.5M 记录的表,格式如下:

Device        Time             ValueID   Value   Voltage
------------------------------------------------------------
1 2014-03-08 22:50:00 AH1 90,0 90,000"

1 2014-03-08 22:50:00 AT1 5,5 5,500"

1 2014-03-08 22:50:00 PP1 0,0 0,000"

1 2014-03-08 22:50:00 WS1 0,0 0,000"

1 2014-03-08 22:50:00 WD1 270,0 270,000"

1 2014-03-08 22:50:00 SR1 0,0 0,000"

1 2014-03-08 23:49:00 ST1 8,288 2,993"

ValueID 列有 13 种不同的数据类型,Value 列包含数据类型的度量。

我需要创建一个具有以下形式的表:

Device Time ValueID(AH1) ValueID(AT1) ValueID(PP1) etc...
------------------------------------------------------------
1 xxxx Value Value Value

我试图在带有 case 语句的新表中使用 INSERT,但它不起作用,“有什么不同的方法吗?” ¿任何线索?谢谢

最佳答案

您可以按如下方式使用数据透视表:

select Device, [Time], [AH1] as [Value(AH1)], [AT1] as [Value(AT1)]... from (
select Device, [Time], ValueId, [Value] from Yourtable )
pivot (max([value]) for valueId in ([AH1],[AT1]...)) p

您可以生成如下动态列:

declare @cols varchar(max)
declare @fromcols varchar(max)
declare @query varchar(max)

select @cols = stuff((select ','+QuoteName(valueid) from #yourdevice group by valueid for xml path('')),1,1,'')
select @fromcols = stuff((select ','+QuoteName(valueid)+' as [Value('+ Valueid + ')]' from #yourdevice group by valueid for xml path('')),1,1,'')
--[AH1] as [Value(AH1)], [AT1] as [Value(AT1)]...

SET @query = 'select Device, [Time], ' + @fromcols + ' from ( ' + ' select Device, [Time], ValueId, [Value] from Yourtable ) a '
SET @Query = @query + ' pivot (max([value]) for valueId in (' + @cols + ')) p '

select @query --Execute below by uncommenting after checking the query
--exec sp_execute @query

关于SQL 将具有不同值的一列转换为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44025080/

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